以前的程序是 AS2 写的,因为要用到 JSON ,感觉AS3方便些,没想到语言之间的差别不小,以下是遇到的一些问题的整理。
Object 不再是默认类型,无类型变量引入
在 ActionScript 2.0 中,下面的两行代码等效,因为缺乏类型注释意味着变量为 Object 类型:
var someObj:Object;
var someObj;
但是,ActionScript 3.0 引入了无类型变量这一概念,这一类变量可通过以下两种方法来指定:
var someObj:*;
var someObj;
无类型变量与 Object 类型的变量不同。二者的主要区别在于无类型变量可以保存特殊值 undefined,而Object 类型的变量则不能保存该值,如果赋给它undefined,则会被转换为null
#inlude 不再需要#
以前使用 #include “mycodefile.as”,现在只需要 include “mycodefile.as” 就行了。
getURL 的变化
AS2: getURL("javascript:ClearPreviousPhotoInfo()");
getURL("http://www.cfh.ac.cn/",”_blank”);
AS3:
var targetURL:URLRequest = new URLRequest("http://www.chinaontology.net/");
navigateToURL(targetURL,"_blank");
带下划线的变量不需要下划线了
_root 变为 root ;其他的如 _x, _y,_visible,_width,_height,_parent 等等都是直接去掉下划线。
注意:
_xscale 变为 scaleX; _yscale 变为 scaleY;
_xmouse 变为 mouseX;_ymouse 变为 mouseY;
文本框变量不能再用了
AS2 里面创建一个文本框,直接赋给一个变量;代码中操作变量即可。现在不能这样用了。
AS3 里面需要给文本框实例命名,然后使用文本框的 text 属性即可,更加面向对象。这个修改还是不错的。
例如: DocTitle.text = "文章标题";
按钮点击事件
AS2 里面,创建一个按钮实例 BtnOK,则点击它的事件这样写:
BtnOK.onPress = function()
{
alert(" BtnOK is Pressed! ");
}
AS3 里面需要修改为
function OK_Clicked(event:MouseEvent):void
{alert(" BtnOK is Pressed! ");
}BtnOk.addEventListener(MouseEvent.CLICK, OK_Clicked);
访问父级对象里面的变量
AS2 里面,主时间轴上代码有个 DebugMsg 变量,记录了调试信息;在子对象 MessageBox 的 ShowDebug 方法中可以这样引用这个变量: _level0.DebugMsg
AS3 里面这样用:
主时间轴上 var DebugMsg:String = "这是调试信息!";
子对象里面这样引用: MovieClip(this.parent).DebugMsg 此时 this.parent 指定的是 DisplayObjectContainer 类,需要将其转换为 MovieClip 对象,才能像 AS2 那样。
_global 没有了,不能再用了
取得对象的尺寸与屏幕的尺寸
屏幕内有 MC1 ,则 stage.width 与 MC1.width 是一样的(BT!!)
stage.width 语义不是屏幕的尺寸, stage.stageWidth 才是。 height的处理同理
初始化参数的传递
AS2 里面直接将参数放在Html文档的Object标签当中作为变量,每个参数可以独立放置。然后在 _root0 上就可以取得。
AS3 里面不行了,方法是:
(1)需要将参数放在 swf 文件后面
<param name="movie" value="View.swf?myname=bruce" />
(2)在Object 标签当中添加 FlashVars 变量
<param name="FlashVars" value="sex=man&myname=bruce" />
取得参数需要
var param:Object = root.loaderInfo.parameters;
var MyName = param["myname"];
文献:有关参数传递的安全性话题 http://www.slideshare.net/taobaoued/flashxhtml-3432665