[04-28] Actionscript的一些不为人知的技巧
1. TextFormat.URL
点击查看全图 很多人都知道使用textField.htmlText来写超文本的方式,可是似乎很少人知道其实我们还可以使用TextFormat.URL来定义。
myFormat = new TextFormat();
myFormat.url = "http://www.830308.com";
my_txt.html = true; //这是必须的
my_txt.htmlText = "JexmBlog"; my_txt.setTextFormat(myFormat);
2. 使用Javascript方法
通常trace方法的浏览器替代方法可以使用
function debug(info){
getUrl("j avascript:alert('" + info + "')");
}
如果使用超文本链接的话,可以直接使用
my_txt.html = true;
my_txt.htmlText = "<a href=j avascript:alert('欢迎光临JexmBlog!')>JexmBlog</a>";
3. 复制数组
如果使用下面的复制数组的方法只是一个指向,并没有形成真正的拷贝。
b_array = a_array;
//当a_array数组内容改变的时候,b_array的内容也随之改变了
//解决方法可以使用下面的方式
b_array = a_array.slice();
4. 卸载拖入舞台的MC
我们知道只有动态创建的mc才可以使用removeMovieClip()方法来卸载,帮助中对removeMovieClip方法的说明如下:
引用删除用 duplicateMovieClip()、MovieClip.duplicateMovieClip() 或
MovieClip.attachMovie() 创建的影片剪辑实例。
下面的技巧可以让我们随心所欲的卸载你需要的MC,即使是你拖入舞台的组件等。
My_mc.swapDepths(100);//把mc的深度值设定为大于0的值
My_mc.removeMovieClip();//这样就可以正常卸载mc了
是不是很有用哦。
PS:使用my_mc.unloadMovie() 以可以删除mc实例,但是却保留了实例属性和剪辑处理函数。用removeMovieClip() 可以删除实例(包括其属性和剪辑处理函数)。
Update:flash中只能用removeMovieClip()删除0 到 1048575 深度的MC,所以swapDepths()方法的数值必须是在0 到 1048575 之间(包含0 和 1048575 )。
5. 魔法深度值–16384
我们知道Flash中的元素使用深度的概念,所有创作中的元素都从 -16383 开始,所以如果我们要让某个元素显示在最底层的话,可以把深度设定为魔法深度值。
其中原因我们不妨深究下:
原来Macromedia's mx.managers.DepthManager 类中定义了下面的值:
// highest allowed depth is reserved for tooltips and cursors
static var reservedDepth:Number = 1048575;
file:///C|/Documents and Settings/Administrator.4A96A9C124B94C0/桌面/1.txt(第 1/3 页)2007-6-19 2:01:44
file:///C|/Documents and Settings/Administrator.4A96A9C124B94C0/桌面/1.txt
// highest depth for all other objects
static var highestDepth:Number = 1048574;
// lowest allowed depth
static var lowestDepth:Number = -16383;
// lowest depth plus this number of layers is reserved
// for statically placed content
static var numberOfAuthortimeLayers:Number = 383;
这下就应该明白个中原因了吧~
6. 检测播放版本和系统信息
有三种方法来检测:
使用getVersion方法
使用$version 变量
使用System.capabilities.version属性
PS:System.capabilities.os 可以获取本机的操作系统
7. 取消TextArea组件中鼠标滚动文本
要取消通过鼠标滚动文本的方法添加下面代码
componentInstance.label.mouseWheelEnabled = false;
Mouse.removeListener(_global.__SVMouseWheelManager);
TextField也可以使用类似的方法,把第一行代码该为:
my_txt.mouseWheelEnabled = false;
8. 设置TextArea组件的滚动条到底部
我们知道textField使用scroll属性设定滚动位置,但是TextArea组件使用vPosition属性来设置垂直滚动位置,下面的代码使得滚动条处于文本区域的底部:
myTextArea.vPosition = myTextArea.maxVPosition;
9. 对影片剪辑采用手行光标显示
当鼠标滑过任何MC或按钮时设置显示手形光标
方法:
my_mc.useHandCursor = true;
10. 设置SWF 文件在播放器或浏览器中的当前对齐方式
通过设置Stage.align属性
Stage.align="TL";//设置为居顶左侧
//更多的属性有
"T" 顶部 中间
"B" 底部 中间
"L" 中间 左侧
"R" 中间 右侧
"TL" 顶部 左侧
"TR" 顶部 右侧
"BL" 底部 左侧
"BR" 底部 右侧
11. 提高程序运行效率的一些方法
良好的编程习惯和技巧可以提高程序的运行效率
(1). 避免在循环中存取定值
file:///C|/Documents and Settings/Administrator.4A96A9C124B94C0/桌面/1.txt(第 2/3 页)2007-6-19 2:01:44
file:///C|/Documents and Settings/Administrator.4A96A9C124B94C0/桌面/1.txt
以简单的loading脚本为例
01 : //第1种写法
02 : _root.onEnterFrame = function () {
03 : bt = _root.getBytesTotal();
04 : bl = _root.getBytesLoaded();
05 : if (bt == bl) {
06 : gotoAndPlay(2);
07 : }
08 : }
09 :
10 : //第2中写法:
11 : bt = _root.getBytesTotal();
12 : _root.onEnterFrame = function () {
13 : bl = _root.getBytesLoaded();
14 : if (bt == bl) {
15 : gotoAndPlay(2);
16 : }
17 : }
显然第2种方法具有更好的效率,因为getBytesTotal是个不变的值,不需要每次重新调用。
(2) 注意变量的范围
1 : var var1 = "value"; //第1中定义方式:本地变量
2 : var2 = "value"; //第2中定义方式:
3 : _global.var3 = "value"; //第3中定义方式:全局变量
第1中变量定义方式是效率最高的,变量的作用完成后会自动清理。如果需要变量在函数或事件中(如onEnterFrame)继续有效,可以使用第2种方式。效率最低的是第3种方式,应该尽量避免这样使用。
(3) 使用太多的函数也会使得程序的性能降低
因为每次调用函数,Flash都会保存所有的变量,然后再执行函数。执行完毕后,又会返回全部变量并继续开始的脚本,这会有时间开销,尤其是在循环中。但是,使用函数是个好习惯,因为它增强可读性和脚本的易用性。
使用类的方式类似于函数,都需要注意。最好的方法是我们自己在编程的时候调试运行时间来寻找最优方式。测试程序执行效率的最简单方式,可以通过循环和getTimer() 方法来测试,下面是一个简单的脚本效率测试。
1 : startTimer = getTimer();
2 : testvar = 0;
3 : for (var t=0; t!=10000; t++) {
4 : testvar++;
5 : }
6 : trace(getTimer()-startTimer);