技术开发 频道

Flex及AS3的百多条小知识

【隐藏Flash Player的右键菜单】
stage.showDefaultContextMenu = false;
【检测系统是否具有音频功能】
flash.system.Capabilities.hasAudio
【检测播放器是在具有MP3解码器的系统上运行,还是在没有MP3解码器的系统上运行】
flash.system.Capabilities.hasMP3
【检测播放器能 (true) 还是不能 (false) 播放流式视频】
flash.system.Capabilities.hasStreamingVideo
【检测播放器是在支持 (true) 嵌入视频的系统上运行,还是在不支持 (false) 嵌入视频的系统上运行】
flash.system.Capabilities.hasEmbeddedVideo
【检测播放器能 (true) 还是不能 (false) 对视频流(如来自 Web 摄像头的视频流)进行编码】
flash.system.Capabilities.hasVideoEncoder
【显示 Flash Player 中的"安全设置"面板】
flash.system.Security.showSettings();
可供选择项:flash.system.SecurityPanel
【让其它域的.swf访问本域的.swf】
在本域的.swf文件里加上:flash.system.Security.allowDomain()
或者使用安全策略文件"crossdomain.xml".在Flash 8以前,这个文件必须放在.swf所在域的根目录,现在,你可以使用flash.system.Security.loadPolicyFile(),指 定安全策略文件所在的位置.拒绝任何域的做法是在<cross-domain-policy>标签内什么也不填,安全策略文件也支持通用字符 "*":
<?xml version="1.0"?>
<!-- http://www.mydomain.com/crossdomain.xml -->
<cross-domain-policy>
<allow-access-from domain="www.riahome.cn" />
<allow-access-from domain="*.Y-boy.cn" />
<allow-access-from domain="210.38.196.48" />
<allow-access-from domain="*" />
</cross-domain-policy>
【数字的不同进制之间的转换】
parseInt(str:String, radix:uint = 0):Number 返回十进制的数,参数radix表示要分析的数字的基数.如果省略radix,就默认为10,除非字符串的开头是"0x","0X"或"0":
trace(parseInt("0x12")); //设定radix为16,输出:18
trace(parseInt("017")); //设定radix为8,输出:15
或者使用Number,uint和int对象的toString(radix)方法.
【使用Math.round()对一个数取整,四舍五入】
Math.round()
trace(Math.round(204.499)); //输出:204
trace(Math.round(401.5)); //输出:402
【使用Math.floor()对一个数向下取整,就是只要整数部分而不理会小数分】
trace(Math.floor(204.99)); //输出:204
【使用Math.ceil()对一个数向上取整,只要小数部分不为零,整数部分就加1】
trace(Math.ceil(401.01)); //输出:402
【产生一个随机数】
使用Math.random()产生一个伪随机数n,其中 0 <= n < 1
【把数字取至最近的小数点位,即指定精确度】
1. 决定你要取的数字的小数点位数:例如,如果你想把90.337取成90.34,就表示你要取到两位小数点位,也就是说你想取至最近的0.01;
2. 让输入值除以步骤1所选的数字(此例为0.01);
3. 使用Math.round()把步骤2所计得的值取成最近的整数;
4. 把步骤3所得的结果乘以步骤2用于除法的那个值.
例如,要把90.337取成两个小数点位数,可以使用:
trace(Math.round(90.337/0.01)*0.01); //输出:90.34
【把数字取成一个整数的最接近倍数值】
例1,这样会把92.5取成5的最近倍数值:
trace(Math.round(92.5/5)*5); //输出:95
例2,这样会把92.5取成10的最近倍数值:
trace(Math.round(92.5/10)*10); //输出:90
【在指定数值范围内获得随机数】
//可取范围:[min, max]
private function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum;
}
应用例子:
模拟投银币,即希望得到随机布尔值(true 或 false): randRange(0, 1);
模拟投骰子,即希望得到随机六个值: randRange(1, 6);
为避免被缓存而需要产生一个少有的数字追加在URL尾端,通常非常好的方法是取得当前毫秒数.
【弧度(radian)与度数(degree)之间的转换】
从弧度转为度数: degrees = radians * 180 / Math.PI
从度数转为弧度: radians = degrees * Math.PI / 180
【计算两点之间的距离】
勾股定理: c2 = a2 + b2
假设有两个影片剪辑mc1和mc2,则它们两点间的距离c为:
var c:Number = Math.sqrt(Math.pow(mc1.x - mc2.x, 2) + Math.pow(mc1.y - mc2.y, 2));
【模拟圆周运动】
已知圆心o(x0, y0),半径r和弧度angle,求圆上任意一点P(x, y)的坐标:
x = x0 + (Math.cos(angle) * r);
y = y0 + (Math.sin(angle) * r);
注意:舞台的x轴正方向水平向右,y轴正方向垂直向下.
【模拟椭圆运动】
已知圆心o(x0, y0),长轴a,短轴b以及弧度angle,求圆上任意一点P(x, y)的坐标:
x = x0 + (Math.cos(angle) * a);
y = y0 + (Math.sin(angle) * b); 

【华氏温度和摄氏温度之间的转换】
华氏温度 = 摄氏度数 * 9 / 5 + 32
摄氏温度 = (华氏度数 - 32) * 5 /9
【公斤与磅之间的转换】
公斤 = 磅 * 2.2
磅 = 公斤 / 2.2
【向数组尾端添加元素】
var array:Array = new Array();
array.push("a", "b");
//向数组尾端添加单一元素也可以这样:
array[array.length] = "c";
//如果以索引设定的元素不存在,数组本身会自动扩展以包含足够的元素数目.介于中间的元素会被设为undefined:
array[5] = "e";
trace(array[4]); //输出: undefined
【向数组开端添加元素】
var array:Array = ["a", "b"];
array.unshift("c", "d");
trace(array); //输出: c,d,a,b
【删除数组中第一个元素并返回该元素,使用shift()方法】
var letters:Array = new Array("a", "b", "c");
var firstLetter:String = letters.shift();
trace(letters); //输出: b,c
trace(firstLetter); //输出: a
【删除数组中最后一个元素并返回该元素的值,使用pop()方法】
var letters:Array = new Array("a", "b", "c");
trace(letters); //输出: a,b,c
var letter:String = letters.pop();
trace(letters); //输出: a,b
trace(letter); //输出: c
【删除数组中的元素,给数组添加新元素并返回删除的元素,使用splice()方法】
splice(startIndex:int, deleteCount:uint, ... values):Array
startIndex: 一个整数,它指定数组中开始进行插入或删除的位置处的元素的索引;
deleteCount: 一个整数,它指定要删除的元素数量;
... values: 用逗号分隔的一个或多个值的可选列表或数组,此列表或数组将插入到此数组中由 startIndex 参数指定的位置.
【查找数组中第一个相匹配的元素】
var array:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];
var match:String = "b";
for(var i:int = 0; i < array.length; i++) {
if(array[i] == match) {
trace("Element with index " + i + " found to match " + match);
//输出: Element with index 1 found to match b
break;
}
}
【查找数组中最后一个相匹配的元素】
var array:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];
var match:String = "b";
for(var i:int = array.length - 1; i >= 0; i--) {
if(array[i] == match) {
trace("Element with index " + i + " found to match " + match);
//输出: Element with index 5 found to match b
break;
}
}
【把字符串转成数组】
使用String.split()方法:
var list:String = "I am YoungBoy.";
var words:Array = list.split(" "); //以空格作为分隔符将字符串切割
trace(words); //输出: I,am,YoungBoy.
【把数组转成字符串】
使用String.join()方法:
var myArr:Array = new Array("one", "two", "three");
var myStr:String = myArr.join(" and ");
trace(myArr); //输出: one,two,three
trace(myStr); //输出: one and two and three
【使用对象数组处理相关数据】
var cars:Array = new Array();
cars.push({make:"Mike", year:1997, color:"blue"});
cars.push({make:"Kelly", year:1986, color:"red"});
for(var i:int = 0; i < cars.length; i++) {
trace(cars[i].make + " - " + cars[i].year + " - " + cars[i].color);
}
//输出:
// Mike - 1997 - blue
// Kelly - 1986 - red
【在数组中获取最小或最大值】
var scores:Array = [10, 4, 15, 8];
scores.sort(Array.NUMERIC);
trace("Minimum: " + scores[0]);
trace("Maximum: " + scores[scores.length - 1]);
【使用for ... in语句读取关联数组元素】
var myObject:Object = new Object();
myObject.name = "YoungBoy";
myObject.age = 20;
for(var i:String in myObject) {
trace(i + ": " + myObject[i]);
}
//输出: name: YoungBoy
// age: 20
注意: for ... in循环不会显示对象所有的内建属性.例如,循环会显示执行期间新增的特殊属性,但是,不会列出内建对象的方法,即使都是储存在对象属性内.
【AVM(ActionScript Virtual Machine,虚拟机)和渲染引擎(Rendering Engine)】
AVM负责执行ActionScript程序,而渲染引擎则是把对象绘制在显示器上.
【指出容器的显示清单中有多少显示对象】
每个容器都有numChildren属性.
【把项目新增至显示清单】
addChild(child:DisplayObject)
addChildAt(child:DisplayObject, index:int)
index: 添加该子项的索引位置.如果指定当前占用的索引位置,则该位置以及所有更高位置上的子对象会在子级列表中上移一个位置.

 

0
相关文章