從基礎(chǔ)開(kāi)始深入FlashAS3教程譯文_第1頁(yè)
從基礎(chǔ)開(kāi)始深入FlashAS3教程譯文_第2頁(yè)
從基礎(chǔ)開(kāi)始深入FlashAS3教程譯文_第3頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、從基礎(chǔ)開(kāi)始深入 Flash AS3 教程 (1)(譯文)在 AS3 中,你可以使用 Stage 類動(dòng)態(tài)的修改影片的幀頻。Stage類()的stage對(duì)象是所有的 sprite和MovieClip以及其他在安全沙箱 里的所有元件的舞臺(tái)。 stage 對(duì)象的幀頻可以是 0.01 到 1000 之間的任何一個(gè)數(shù)。要修改幀 頻,使用下面的代碼:/ 將幀頻修改到 12 幀每秒( FPS)stage.frameRate = 12;類方法的作用域和類綁定在一起AS3 完全基于類構(gòu)造。當(dāng)一個(gè)類被創(chuàng)建的時(shí)候, 類中的參數(shù),變量,方法或任何實(shí)例都同時(shí) 被創(chuàng)建。和 AS2 不同, AS3 中的方法在執(zhí)行的時(shí)候,將使

2、用和類同樣的作用域。例如下面 的代碼:package public class ClassScope extends Sprite public function ClassScope() traceThis(); / 輸出 "Class Instance"var obj:Object = new Object();obj.traceThis = traceThis;obj.traceThis(); / 輸出"Class Instanee"traceThis.call(new Sprite(); / 輸出"Class Instanee"

3、;public override function toString():String return "Class Instance"public function traceThis():void trace(this); 圖形對(duì)象和繪圖 API 和AS1和AS2 一樣,AS3也提供了繪圖 API來(lái)繪制矢量線段和圖形。但是在AS3中,繪圖API 將獨(dú)立于顯示對(duì)象( display objects:MoiveClip , sprites 等)而被定義為圖形對(duì)象 ()。圖形對(duì)象擁有各種繪圖方法用來(lái)在內(nèi)部繪制圖形。和以前一樣,圖形內(nèi)容將在所有對(duì)象的最下層。同時(shí),在 AS3 中有

4、一些新的方法來(lái)幫助你方便的繪制簡(jiǎn) 單的圖形。包括:園: drawCircle(x:Number, y:Number, radius:Number):void 橢圓: drawEllipse(x:Number, y:Number, width:Number, height:Number):void 矩形: drawRect(x:Number, y:Number, width:Number, height:Number):void 圓 角 矩 形 : drawRoundRect(x:Number, y:Number, width:Number, height:Number, ellipseWidt

5、h:Number, ellipseHeight:Number):void代碼舉例:/ 繪制一個(gè)藍(lán)色的圓角矩形var square:Sprite = 0, 100, 50, 10, 10); addChild(square);4,新的變量類型AS3 中有許多新的數(shù)據(jù)類型。其中有些類型是以前沒(méi)有出現(xiàn)的。 AS3 中的基本數(shù)據(jù)類型如 下:簡(jiǎn)單數(shù)據(jù)類型:Booleanint null Number String uint undefined 復(fù)雜數(shù)據(jù)類型: Object Array Date ErrorFunctionRegExpXMLXMLList新的數(shù)據(jù)類型通過(guò)類來(lái)定義,例如:等等。注意: 特殊類

6、型 Void 在 AS3 中被改成了全小寫(xiě): void 。 “* ”可以用來(lái)代表所有數(shù)據(jù)類型。如下:var anything:*;AS3 中的 XML 和 AS1 和 AS2 中完全不一樣。 以前的 XML 類型(對(duì)象)被定義為 XMLObject 。 AS3 中的 XML 是標(biāo)準(zhǔn)的 E4X-based XML 對(duì)象。int 和 uint 是 number 類型的新擴(kuò)展, int 表示整型(沒(méi)有小數(shù)) , unit 是無(wú)符號(hào)整型(不能是 十進(jìn)制,不能是負(fù)數(shù)) 。 使用 int 型比使用 Number 能稍微的提升運(yùn)行效率,而 uint 型只應(yīng) 該使用在必須的地方,比如顏色值。5,顯示對(duì)象AS3

7、 有一個(gè)新的集合: 顯示對(duì)象。 這個(gè)集合包含了所有可以在舞臺(tái)上看到或者可以被添加到 顯示列表中的對(duì)象,包括以前的 MovieClip , button 和 textField 對(duì)象。 AS3 的顯示對(duì)象有: AVM1MovieBitmapLoaderMorphShape* MovieClipShapeSimpleButtonSpriteStaticText*TextFieldVideo有 * 的表示此對(duì)象必須在舞臺(tái)上手動(dòng)創(chuàng)建,不能直接通過(guò)AS 創(chuàng)建。AVM1Movie 是使用 AS1 和 AS2 創(chuàng)建的 Movie ,AS3 創(chuàng)建的 Movie 需要通過(guò) AVM2 來(lái)播放。 因此用 AS1 和

8、 AS2 創(chuàng)建的 Movie 在 AVM2 中被作為一個(gè)顯示對(duì)象來(lái)播放。但是不能和 AS 合使用。Bitmaps 是位圖對(duì)象。 可以通過(guò) BitmapData 對(duì)象來(lái)指定顯示效果, 也可以通過(guò)位圖文件來(lái)設(shè) 定。Loader 對(duì)象用來(lái)加載和顯示外部的 image 和 swf 影片文件。MorphShapes 是在時(shí)間軸上創(chuàng)建的圖形。雖然不能通過(guò) AS 創(chuàng)建,但是可以通過(guò) AS 來(lái)引用 和控制。MovieClips 人人都會(huì)用Shapes是從MovieClip中分離出來(lái)一個(gè)只有g(shù)raphics對(duì)象的圖形容器。在 shape中可以通過(guò)graphics對(duì)象使用繪圖 API繪制各種圖形。使用shape代

9、替MovieClip可以減少內(nèi)存負(fù)擔(dān)。Sprite 是沒(méi)有時(shí)間軸的 MovieClip ,在 AS3 使用中,可能會(huì)在很多地方使用 sprite 代替 MovieClip ,尤其在創(chuàng)建自定義的顯示組件時(shí)。StaticText 和 MorphShapes 一樣,不能通過(guò) AS 創(chuàng)建,這是在時(shí)間軸上創(chuàng)建的文本對(duì)象。TextField,文本對(duì)象。Video 對(duì)象,播放 flash 視頻。6,新的 import 標(biāo)識(shí)AS3 中的 import 標(biāo)識(shí)和 AS2 中有一些不同。 在 AS2 中, import 被用來(lái)代理引用類的長(zhǎng)名稱, 在類中并不是必須的。因此在 AS2 中,如果你不使用 import

10、,你也可以使用類的長(zhǎng)名稱來(lái) 引用,例如:/ ActionScript 2= 在 AS3 中, import 標(biāo)識(shí)是訪問(wèn)類的必須標(biāo)識(shí)。在使用到其他類的時(shí)候,也可以使用類的長(zhǎng) 名稱,但是 import 不能省略掉。例如:/ ActionScript 3= 和 AS2 一樣, import 中可以使用通配符( * )來(lái)導(dǎo)入整個(gè)包:類型轉(zhuǎn)換和 as 操作符AS 允許在需要的時(shí)候,將對(duì)象的類型改成另外一種匹配的類型,這就是類型轉(zhuǎn)換。AS2 和AS3都支持通過(guò)像“ type(object) ”這樣的方式進(jìn)行類型轉(zhuǎn)換。例如,現(xiàn)定義一個(gè)數(shù)據(jù)類型為 Object,你可以通過(guò)使用類型名稱的語(yǔ)法將這個(gè)數(shù)據(jù)轉(zhuǎn)換成另外

11、一種數(shù)據(jù)類型。如: var obj:Object = getMyCustomObject();vay customObj:MyClass = MyClass(obj);AS3引入了一種新的操作符“as”來(lái)進(jìn)行類型轉(zhuǎn)換。as操作符代替了類型名稱語(yǔ)法來(lái)改變對(duì)象的數(shù)據(jù)類型。如:var obj:Object = getMyCustomObject();vay customObj:MyClass = obj as MyClass;as操作符的工作方式和AS2中的非常類似。如果轉(zhuǎn)換不可能進(jìn)行,那么轉(zhuǎn)換的返回值是null。AS3 依舊支持通過(guò) type(object) 的方式來(lái)轉(zhuǎn)換類型,但是,這種方式和以前

12、有一點(diǎn)細(xì)微的不 同。以前轉(zhuǎn)換失敗是返回 null ,現(xiàn)在轉(zhuǎn)換失敗后將拋出一個(gè)類型錯(cuò)誤(TypeError )。當(dāng)嘗試轉(zhuǎn)換兩種對(duì)立的數(shù)據(jù)類型的時(shí)候就會(huì)失敗。 例如將一個(gè)數(shù)據(jù)類型轉(zhuǎn)換成另外一個(gè)不可能通過(guò) 聯(lián)合和繼承而得到的類型。注意:AS上的全局轉(zhuǎn)換方法Class(object)的優(yōu)先級(jí)依舊高于type(object)轉(zhuǎn)換方法。這些方法包括 String() , Number() ,和 Array() 等。7,唯一的類變量(本文非直接翻譯,原文如下: )In ActionScript 2, variables defined within a class's body were defin

13、ed in the class's prototype object. This was an efficient means to handle variable definitions but it also meant that complex data types (such as Arrays) had a tendency to be "shared" among instances if not explicitly defined for instances within the class constructor. This is no longe

14、r a problem with ActionScript 3. Class variables defined in the class body are now unique to each class instance so this problem no longer occurs.在 AS2 中,復(fù)雜數(shù)據(jù)類型(比如數(shù)組) ,如果在類體之中,方法之外直接初始化,而不在構(gòu) 造器中初始化,會(huì)被理解為“共享”的數(shù)據(jù),而被所有的實(shí)例共享使用(類似于static的效果)。但是在 AS3 中不存在這個(gè)問(wèn)題。類變量是每個(gè)實(shí)例獨(dú)有的,唯一的變量。如下:class myClassprivate var

15、list:Array = 1,2,3; / 在 AS2 中會(huì)有一定問(wèn)題, AS3 中就很好public function myClass()/在 AS2 中,應(yīng)該在這里初始化 list8,新的 MouseMove 行為mouseMove 行為在 AS3 中有所改變。以前, mouseMove 動(dòng)作是一個(gè)全局概念,也就是說(shuō)不 管鼠標(biāo)在 FlashMovie 的任何一個(gè)地方,只要移動(dòng)了,就會(huì)觸發(fā)任何一個(gè)MovieClip 的mouseMove 行為。在AS3中,Mouse對(duì)象不再用來(lái)分派(dispath)鼠標(biāo)行為。對(duì)于 mouseMove行為來(lái)說(shuō),你 應(yīng)該監(jiān)聽(tīng)一個(gè)InteractiveObject

16、的實(shí)例,比如 Sprites, MovieClip和Stage。所以,你可能需 要使用 InteractiveObject 來(lái)代替 Mouse 接收監(jiān)聽(tīng)。 對(duì)于每一個(gè) InteractiveObject 實(shí)例, mouseMove行為只在這個(gè)對(duì)象的所在范圍內(nèi)執(zhí)行。如果你要使用全局的mouse事件監(jiān)聽(tīng),則需要對(duì)stage添加監(jiān)聽(tīng)。因此,在使用 mouseMove 來(lái)拖動(dòng)一個(gè)對(duì)象的時(shí)候,當(dāng)你的鼠標(biāo)離開(kāi)的脫離對(duì)象,對(duì)該對(duì)象 的 mouseMove 事件就會(huì)失效,拖動(dòng)效果也就同時(shí)實(shí)效了。這個(gè)時(shí)候,你可能需要對(duì)stage添加 move 行為來(lái)進(jìn)行監(jiān)聽(tīng):stage.addEventListener(Mou

17、seEvent.MOUSE_MOVE, dragMyObject);10, delete 關(guān)鍵字和類成員delete 關(guān)鍵字在 Flash 中是用來(lái)刪除定義的變量,但是并不將對(duì)象從內(nèi)存中清除掉(這是垃 圾收集器的工作) 。它只是將一個(gè)變量的引用設(shè)置成無(wú)效,讓內(nèi)存中的這個(gè)對(duì)象無(wú)法再被引 用和使用,也無(wú)法再使用 for in 來(lái)枚舉。事實(shí)上,垃圾處理器(GC)將在特定的時(shí)候,自動(dòng)的從內(nèi)存中刪除那些不再被引用和使用的變量。比如,你創(chuàng)建了兩個(gè)對(duì)象引用A和B,都指向了對(duì)對(duì)象 ObjectX的引用,如果delete 了 A ,并不會(huì)讓垃圾收集器把 ObjectX 從內(nèi)存中刪除,因?yàn)?B 的引用還是指向了這

18、個(gè)對(duì)象。 如果將A和B都delete,則不再有對(duì) ObjectX的引用,ObjectX也將被垃圾收集器回收。例 如:var a:Object = new Object();var b:Object = a; / b 和 a 引用同一個(gè) new Object。; delete a;trace(b); / 輸出 object Object - 在內(nèi)存中還是存在delete b;/ GC 將回收 object這個(gè)特性在Flash8和9( AS123)中幾乎都是一樣的,但是在 Flash8中,GC的一些特性得 到改善并能更好的工作。 (注意,垃圾收集不是即時(shí)的)雖然 GC 在 AS3 中并沒(méi)有什么本質(zhì)

19、上的改變, 但是因?yàn)槭褂昧诵碌奶摂M機(jī), delete 關(guān)鍵字的 行為有所改變。 現(xiàn)在, delete 關(guān)鍵字只能針對(duì)類的動(dòng)態(tài)屬性和非公有成員有效。 而在 AS1 和 2 中, delete 能被用在所有的東西上。/ ActionScript 2class DeleteVarClass public var myVar:Number;function DeleteVarClass() myVar = 1;trace(myVar); / 1delete myVar; trace(myVar); / undefined/ ActionScript 3 package public class Del

20、eteVarClass public var myVar:Number;public function DeleteVarClass() myVar = 1; trace(myVar); / 1 delete myVar; trace(myVar); / 1在上面的 AS3 例子中,因?yàn)?myVar 變量是一個(gè)公有成員,所以不能用 delete 來(lái)刪除這個(gè)變 量。盡管在 AS3 中不能刪除類成員,但是如果你想刪除一個(gè)對(duì)象的所有引用,可以通過(guò)將變量設(shè)置為null來(lái)代替delete。如:myVar = null;如果一個(gè)對(duì)象的所有引用都是 null, GC 將自動(dòng)的從內(nèi)存中刪除這個(gè)對(duì)象。11 ,

21、Dictionary 類AS3 中的 Dictionary 類( )是一個(gè)新的 AS 類。 Dictionary 類和 Object 唯 一的區(qū)別在于: Dictionary 對(duì)象可以使用非字符串作為鍵值對(duì)的鍵。例如:var obj:Object = new Object(); obj"name" = 1; / 鍵是字符串 "name" obj1 = 2; / 鍵是 1 (被轉(zhuǎn)換成字符串 "1")objnew Object() = 3; / 鍵是 new Object() ,被轉(zhuǎn)傳成字符串 "object Object&qu

22、ot; for (var prop:String in obj) trace(prop); / 輸出: object Object, 1, name trace(objprop); / 輸出: 3, 2, 1也就是說(shuō), 無(wú)論用什么類型的變量作為鍵,都將被轉(zhuǎn)換成字符串。 同時(shí),如果你使用了不同 的對(duì)象作為鍵,都會(huì)北轉(zhuǎn)換成字符串 "object Object" 作為鍵,因此而指向了同一個(gè)數(shù)據(jù)。例 如:ActionScript Code: var a:Object = new Object(); var b:Object = new Object(); var obj:Objec

23、t = new Object();obja = 1; / obj"object Object" = 1;objb = 2; / obj"object Object" = 2; for (var prop:String in obj) trace(prop); / traces: object Object trace(objprop); / traces: 2Dictionary 類將沒(méi)有這個(gè)限制,你可以將鍵設(shè)置成任何一種數(shù)據(jù)類型。例如: var a:Object = new Object();var b:Object = new Object();va

24、r dict:Dictionary = new Dictionary();dicta = 1; / dicta = 1;dictb = 2; / dictb = 2;for (var prop:* in dict) trace(prop); / traces: object Object, object Object trace(dictprop); / traces: 1, 2雖然在 trace 的時(shí)候,輸出的還是 object Object ,但是這個(gè)結(jié)果是對(duì)象的 toString 的結(jié)果。 在 Dictionary 對(duì)象中,代表的是不同的對(duì)象引用。注意,這里的 prop 的類型是 * 。

25、這是很重要的, 因?yàn)?dict 對(duì)象中的鍵可能是任何數(shù)據(jù)類型的。 12,標(biāo)簽申明在 AS3 中引入了標(biāo)簽,新的標(biāo)簽可以和循環(huán)體一起使用。例如,現(xiàn)在有兩個(gè)嵌套的循環(huán)體, 如果想要在內(nèi)循環(huán)體中 break 掉外循環(huán),一般使用下面的方法:var i:Number;var j:Number;var exit:Boolean = false; for (i=0; i<10; i+) for (j=0; j<10; j+) if (i > 3 && j > 3) exit = true; break; if (exit) break; 在引入了新的標(biāo)簽以后,可以使用

26、下面的方法從內(nèi)循環(huán)體中直接break 掉外循環(huán)體:var i:Number;var j:Number; mainLoop: for (i=0; i<10; i+) for (j=0; j<10; j+) if (i > 3 && j > 3) break mainLoop;在第一個(gè)循環(huán)體上設(shè)置了 mainLoop 的標(biāo)簽,因此在循環(huán)體內(nèi)任何地方使用 break mainLoop 直接中止外循環(huán)。13,檢測(cè)鼠標(biāo)離開(kāi) Movie 的動(dòng)作在以前的 AS 版本中,你無(wú)法做到檢測(cè)鼠標(biāo)是否還在 Flash Movie 上。因此影片不能檢測(cè)到 用戶是否在關(guān)注著當(dāng)前的

27、Movie 。另外一個(gè)問(wèn)題是,如果使用了自定義的鼠標(biāo)樣式,在鼠標(biāo) 移出 Movie 后,自定義的鼠標(biāo)還是繼續(xù)停留在影片上,而不能正確的顯示鼠標(biāo)當(dāng)前的位置。 現(xiàn)在, AS3 允許你通過(guò)監(jiān)聽(tīng) stage 的 mouseLeave 行為來(lái)捕獲鼠標(biāo)移出 Movie 的動(dòng)作。 mouseLeave 行為在鼠標(biāo)移出 Movie 的時(shí)候執(zhí)行。但是現(xiàn)在并沒(méi)有 mouseEnter 事件,不過(guò)你 可以通過(guò)使用 mouseMove 來(lái)設(shè)置。下面的例子中使用了一個(gè)方框來(lái)作為自定義的鼠標(biāo): package public class Test extends Sprite private var cursor:Spri

28、te = new Sprite(); public function Test() 0, 25, 25); addChild(cursor);stage.addEventListener(Event.MOUSE_LEAVE, cursorHide); stage.addEventListener(MouseEvent.MOUSE_MOVE, cursorFollow); Mouse.hide();public function cursorHide(evt:Event):void cursor.visible = false;public function cursorFollow(evt:M

29、ouseEvent):void if (!cursor.visible) cursor.visible = true;cursor.x = stage.mouseX;cursor.y = stage.mouseY; evt.updateAfterEvent();當(dāng)鼠標(biāo)離開(kāi) Movie 的時(shí)候,鼠標(biāo)指針將被隱藏。當(dāng)鼠標(biāo)再次移動(dòng)到 Movie 上的時(shí)候, mouseMove 會(huì)被執(zhí)行,然后顯示鼠標(biāo)。14, SimpleButton 實(shí)例AS3 現(xiàn)在有一個(gè)新的類: SimpleButton ( )。這個(gè)類允許你通過(guò) AS 創(chuàng)建一個(gè)按鈕。var myButton:SimpleButton = new

30、SimpleButton();SimpleButton 類有 4 個(gè)屬性分別代表按鈕的四個(gè)不同狀態(tài):upState,overState, downState和 hitAreaState 。你可以為每一個(gè)狀態(tài)創(chuàng)建一個(gè)新的顯示對(duì)象,然后將顯示對(duì)象賦予SimpleButton 的各種狀態(tài): myButton.upState = mySprite1;myButton.overState = mySprite2; myButton.downState = mySprite3;myButton.hitAreaState = mySprite4; 15,數(shù)組定義中的逗號(hào) 本文非直接翻譯,原文解釋部分如下:W

31、hen defining arrays in ActionScript 3 using the shorthand array access operator (brackets), you can now have a trailing comma following the last element without causing an error (like in PHP). This makes working with multi-line array definitions a little less error-prone when rearranging elements.先來(lái)

32、看一個(gè)例子: var myList:Array = "The","quick","brown","fox",;在 AS1 和 2 中, "fox" 后的逗號(hào)會(huì)導(dǎo)致一個(gè)編譯錯(cuò)誤,但是在 AS3 中不會(huì)了。 注意,這個(gè)逗號(hào)只是在使用 定義數(shù)組的時(shí)候有效, 使用 Array() 或 new Array() 的時(shí)候是無(wú)效 的。16,包塊AS3 中的包定義方式和 AS2 中有所不同。在 AS3 中,包路徑不再是類定義的一部分,而是使用一個(gè)包塊來(lái)包含類。定義包塊使用的是 package 標(biāo)簽,如下:clas

33、s MyClass 而在 AS2 中,應(yīng)該是下面的樣式:/ ActionScript 2:實(shí)際上,在 AS3 中,所有的類都必須定義在包里面,如果一個(gè)類不屬于任何一個(gè)包,也需 要使用空的包路徑來(lái)定義:package class NotInAPackageClass 每一個(gè)包塊可以將一些有關(guān)聯(lián)的類或者方法包含在一個(gè)文件里面。 文件中包塊里的類或方法 必須使用和文件名相同的名稱:function StripString(str:String):void / .上面的代碼應(yīng)該保存在一個(gè)名稱為 StripString.as 的文件中,并放在路徑為 com/kirupa/utils 的文件夾里。17,一

34、個(gè)文件中的多個(gè)類一般來(lái)說(shuō),一個(gè).as文件中就一個(gè)類,但是在 AS3中,現(xiàn)在允許在一個(gè)文件中定義多個(gè)類用 來(lái)輔助主類。在.as文件中的輔助類,必須定義在類包以外,并且只針對(duì)此文件中的主類和其他輔助類可見(jiàn)。例如:package class MyClass function MyClass() var helper:MyHelper = new MyHelper();class MyHelper function MyHelper() var helper:HelpersHelper = new HelpersHelper();class HelpersHelper function Helpers

35、Helper () 注意, 在包塊中最多只能定義一個(gè)類。 在同一個(gè)文件中的輔助類不是包塊的一部分, 并且只 能在此文件中可見(jiàn)和被使用。18,訪問(wèn)屬性AS3 為類和類成員引入了兩個(gè)新的訪問(wèn)屬性來(lái)擴(kuò)展 AS2 中的 private 訪問(wèn)屬性。在 AS3 中, 現(xiàn)在有下面的訪問(wèn)控制屬性:publicprotectedprivate internal (默認(rèn) )public :public 屬性和 AS2 中一樣。在任何地方定義的 public 屬性,能在任何地方和被任何 成員引用。構(gòu)造器必須定義成 public 。應(yīng)用程序類必須是 public 的。protected:protected 是一個(gè)新的

36、屬性。 被 protected 指定的成員, 只能被其本身或其子類訪問(wèn)。 如果外部類嘗試訪問(wèn)被 protected 的成員,將會(huì)拋出編譯錯(cuò)誤。類和構(gòu)造器不能被聲明為 protected。private :AS2 中已經(jīng)有 private 屬性,但是在 AS2 中,子類成員可以任意的訪問(wèn)父類的 private 成員?,F(xiàn)在在 AS3 中, private 屬性只能在類內(nèi)部被訪問(wèn),其他類包括子類都不能直接訪問(wèn) 此成員。 也就是說(shuō), 在子類中可以定義一個(gè)名稱和父類某成員名稱一樣的成員, 只要父類的 此成員是聲明為 private 的。類和構(gòu)造器不能被定義為 private 。internal :int

37、ernal 和 public 比較類似,不同的地方在于類成員只能被同一個(gè)包中的成員所訪 問(wèn),而其他包中的成員不能訪問(wèn)。internal 是除了構(gòu)造器以外的所有類和類成員的默認(rèn)聲明。 輔助類的訪問(wèn)控制有所不同。由于輔助類不屬于任何包, internal 的聲明將限制其被訪問(wèn)只 能是當(dāng)前文件之內(nèi)。 注意:主類不能繼承輔助類, 只有輔助類能繼承輔助類,并且要在同一 個(gè)文件內(nèi)。訪問(wèn)控制的錯(cuò)誤,并不僅僅是編譯時(shí)錯(cuò)誤,有時(shí)候也是運(yùn)行時(shí)錯(cuò)誤,在 AS2 中用來(lái)訪問(wèn)隱 藏方法的方式,在 AS3 中不能用了,如:package / 應(yīng)用類必須定義成 public ( 默認(rèn)是 internal)public cl

38、ass AccessControl extends Sprite / 構(gòu)造器總是 public 的function AccessControl() / 只有在這個(gè)文件中才能訪問(wèn)輔助類var helper:Helper = new Helper(); trace(helper.pubNum); / OK/ trace(tNum); / Error - 錯(cuò)誤,不能訪問(wèn) protected 成員/ trace(helper.privNum); / Error - 錯(cuò)誤,不能訪問(wèn) private 成員 trace(erNum); / OK/ 輔助類默認(rèn)是 int

39、ernal class Helper / public 聲明允許在任何地方被訪問(wèn)/ 變量通常被設(shè)置為 private 的,然后通過(guò)聲明 public 的 get set 方法來(lái)訪問(wèn) public var pubNum:Number = 1;/ protected 聲明只允許在子類中被訪問(wèn) protected var protNum:Number = 2;/ private 聲明只能在類內(nèi)部被訪問(wèn)private var privNum:Number = 3;/ internal 聲明只允許在同一個(gè)包中被訪問(wèn)/ 但是對(duì)于輔助類來(lái)說(shuō),只能在同一個(gè)文件類被訪問(wèn) internal var interNu

40、m:Number = 4;/ 構(gòu)造器永遠(yuǎn)都是 public 的 function Helper() / 子輔助類默認(rèn)是 internal 的/ 可以繼承其他輔助類class SubHelper extends Helper / 構(gòu)造器, public function SubHelper() trace(pubNum); / OK trace(protNum); / OK - 繼承得到的 / trace(privNum); / Error - 不能訪問(wèn) private trace(interNum); / OK 另外一個(gè)例子: package import containers.*;/ App

41、lication class needs to be public (internal by default)public class AccessControl extends Sprite / constructors are always publicfunction AccessControl() / can access classes in other packages/ only if publicvar bowl:Bowl = new Bowl(); / OK/ var basket:Basket = new Basket(); / Error - cannot access

42、internal trace(bowl.pubNum); / OK/ trace(tNum); / Error - cannot access protected/ trace(bowl.privNum); / Error - cannot access private/ trace(erNum); / Error - cannot access internalActionScript Code: package containers / public class accessible anywherepublic class Bowl / public ac

43、cess granted anywherepublic var pubNum:Number = 1;/ protected access granted only for/ subclasses in that class protected var protNum:Number = 2;/ private access granted only in this class private var privNum:Number = 3;/ internal access granted only in the same package internal var interNum:Number = 4;/ constructors are always publicfunction Bowl() / can access inteneral classes if in same package var basket:Basket = new Basket();trace(basket.pubNum); / OK/ trace(tNum); / Error - cannot access protected/ trace(basket.privNum); / Error

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論