《2022年学习ActionScript.实例 .pdf》由会员分享,可在线阅读,更多相关《2022年学习ActionScript.实例 .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学习 ActionScript 3.0实例循序渐进学习 ActionScript 3.0(七)SimpleButton实例AS3现在有一个新的类: SimpleButton (flash.display.SimpleButton)。这个类允许你通过 AS创建一个按钮。var myButton:SimpleButton = new SimpleButton();SimpleButton类有 4 个属性分别代表按钮的四个不同状态:upState ,overState ,downState 和hitAreaState。你可以为每一个状态创建一个新的显示对象,然后将显示对象赋予 SimpleButto
2、n 的各种状态:myButton.upState = mySprite1; myButton.overState = mySprite2; myButton.downState = mySprite3; myButton.hitAreaState = mySprite4; *数组定义中的逗号本文非直接翻译,原文解释部分如下:When defining arrays in ActionScript 3 using the shorthand array access operator (brackets), you can now have a trailing comma following
3、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. 先来看一个例子:var myList:Array = The, quick, brown,fox,; 在 AS1和 2 中,fox 后的逗号会导致一个编译错误,但是在AS3中不会了。注意,这个逗号只是在使用 定义数组的时候有效, 使用 Array() 或 new Array
4、()的时候是无效的。循序渐进学习 ActionScript 3.0(八)*包块AS3中的包定义方式和AS2中有所不同。在 AS3中,包路径不再是类定义的一部分,而是使用一个包块来包含类。定义包块使用的是package 标签,如下:package my.package.path class MyClass 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 而在 AS2中,应该是下面的样式:/ ActionScript 2: clas
5、s my.package.path.MyClass 实际上,在 AS3中,所有的类都必须定义在包里面,如果一个类不属于任何一个包,也需要使用空的包路径来定义:package class NotInAPackageClass 每一个包块可以将一些有关联的类或者方法包含在一个文件里面。文件中包块里的类或方法必须使用和文件名相同的名称:package com.kirupa.utils function StripString(str:String):void / . 上面的代码应该保存在一个名称为StripString.as的文件中,并放在路径为com/kirupa/utils的文件夹里。*一个文件
6、中的多个类一般来说,一个 .as 文件中就一个类,但是在AS3中,现在允许在一个文件中定义多个类用来辅助主类。在.as 文件中的辅助类,必须定义在类包以外,并且只针对此文件中的主类和其他辅助类可见。例如:package class MyClass function MyClass() var helper:MyHelper = new MyHelper(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - class MyHel
7、per function MyHelper() var helper:HelpersHelper = new HelpersHelper(); class HelpersHelper function HelpersHelper () 注意,在包块中最多只能定义一个类。 在同一个文件中的辅助类不是包块的一部分,并且只能在此文件中可见和被使用。循序渐进学习 ActionScript 3.0(九)*访问属性AS3为类和类成员引入了两个新的访问属性来扩展AS2中的 private访问属性。在 AS3中,现在有下面的访问控制属性:public protected private internal (默
8、认) public :public属性和 AS2中一样。在任何地方定义的public属性,能在任何地方和被任何成员引用。构造器必须定义成public 。应用程序类必须是public的。protected :protected是一个新的属性。被protected指定的成员,只能被其本身或其子类访问。 如果外部类尝试访问被protected的成员,将会抛出编译错误。类和构造器不能被声明为protected 。private :AS2中已经有 private属性,但是在 AS2中,子类成员可以任意的访问父类的 private成员。现在在 AS3中,private属性只能在类内部被访问,其他类包括子类
9、都不能直接访问此成员。也就是说,在子类中可以定义一个名称和父类某成员名称一样的成员,只要父类的此成员是声明为private的。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 类和构造器不能被定义为private 。internal:internal和 public比较类似,不同的地方在于类成员只能被同一个包中的成员所访问,而其他包中的成员不能访问。internal是除了构造器以外的所有类和类成员的默认声明。辅助类的访问控制有所不
10、同。由于辅助类不属于任何包,internal的声明将限制其被访问只能是当前文件之内。注意:主类不能继承辅助类, 只有辅助类能继承辅助类,并且要在同一个文件内。访问控制的错误, 并不仅仅是编译时错误, 有时候也是运行时错误, 在 AS2中用来访问隐藏方法的方式,在AS3中不能用了,如:package import flash.display.Sprite; / 应用类必须定义成 public (默认是 internal) public class AccessControl extends Sprite / 构造器总是 public的 function AccessControl() / 只有在
11、这个文件中才能访问辅助类 var helper:Helper = new Helper(); trace(helper.pubNum); / OK / trace(helper.protNum); / Error - 错误,不能访问protected成员 / trace(helper.privNum); / Error - 错误,不能访问 private成员 trace(helper.interNum); / OK / 辅助类默认是 internal class Helper / public声明允许在任何地方被访问 / 变量通常被设置为 private的,然后通过声明public的 get
12、set方法来访问 public var pubNum:Number = 1; / protected声明只允许在子类中被访问名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - protected var protNum:Number = 2; / private声明只能在类内部被访问 private var privNum:Number = 3; / internal声明只允许在同一个包中被访问 / 但是对于辅助类来说,只能在同一个
13、文件类被访问 internal var interNum:Number = 4; / 构造器永远都是 public的 function Helper() / 子辅助类默认是 internal的/ 可以继承其他辅助类class SubHelper extends Helper / 构造器, public function SubHelper() trace(pubNum); / OK trace(protNum); / OK - 继承得到的 / trace(privNum); / Error - 不能访问 private trace(interNum); / OK 另外一个例子:package
14、import flash.display.Sprite; import containers.*; / Application class needs to be public (internal by default) public class AccessControl extends Sprite / constructors are always public function AccessControl() / can access classes in other packages / only if public var bowl:Bowl = new Bowl(); / OK
15、/ var basket:Basket = new Basket(); / Error - cannot access internal 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - trace(bowl.pubNum); / OK / trace(bowl.protNum); / Error - cannot access protected / trace(bowl.privNum); / Error - cannot a
16、ccess private / trace(bowl.interNum); / Error - cannot access internal ActionScript Code: package containers / public class accessible anywhere public class Bowl / public access granted anywhere public var pubNum:Number = 1; / protected access granted only for / subclasses in that class protected va
17、r 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 public function Bowl() / can access inteneral classes if in same package var basket:Basket
18、= new Basket(); trace(basket.pubNum); / OK / trace(basket.protNum); / Error - cannot access protected / trace(basket.privNum); / Error - cannot access private trace(basket.interNum); / OK - same package / clone using public method var basketCopy:Basket = basket.clone(); 名师资料总结 - - -精品资料欢迎下载 - - - -
19、- - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - ActionScript Code: package containers / interal only accessible / from other classes in package internal class Basket / public access granted anywhere public var pubNum:Number = 1; / protected access granted only for / su
20、bclasses 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 public function Basket() / accessible anywhere as long a
21、s / referencing a Basket instance public function clone():Basket var basket:Basket = new Basket(); basket.pubNum = pubNum; / OK basket.protNum = protNum; / OK - same class basket.privNum = privNum; / OK - same class basket.interNum = interNum; / OK return basket; *抽象类不幸的是,AS3中并没有抽象类 (只能继承,不能实例化) 。因此
22、你不能在 Flash中直接创建抽象类。但是,AS中的一些内置类实际上是抽象类。包括:DisplayObject InteractiveObject DisplayObjectContainer 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 和抽象类一样,你不能使用new关键字创建这些类的实例。例如:var myObj:InteractiveObject = new InteractiveObject(); /错误但是,除此之外
23、,在 AS中,你也不能创建这些类的直接子类,例如:package import flash.display.DisplayObject; public class MyDisplay extends DisplayObject public function MyDisplay () / ERROR 这个类在的特性和在Player 中如何定义有关。如果你创建这些类的直接子类并实例化,或者直接实例化这个类,都会出现Argument Error 。因此,如果你想扩展一个抽象类,可以采用扩展抽象类的现有的internal子类的方法。例如,如果你想扩展DisplayObject ,你可以扩展 Shape,一个轻量级的,internal访问级别的, DisplayObject的直接子类。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -