以前的程序是 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