动态修改影片的帧频,范围0.01到1000之间 stage.frameRate = 12; //----------------------------------- 类方法的作用域和类绑定在一起 //----------------------------------- 图形对象和绘图API 园: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, ellipseWidth:Number, ellipseHeight:Number):void //----------------------------------- 在AS3中,import标识是访问类的必须标识。在使用到其他类的时候,也可以使用类的长名称,但是import不能省略掉。 //----------------------------------- 类变量是每个实例独有的,唯一的变量。 //----------------------------------- 对于每一个InteractiveObject实例,mouseMove行为只在这个对象的所在范围内执行。 stage添加move行为来进行监听: stage.addEventListener(MouseEvent.MOUSE_MOVE, dragMyObject); //----------------------------------- 公有成员变量不能用delete来删除 但可以通过将变量设置为null来代替delete //----------------------------------- AS3中的Dictionary类(flash.utils.Dictionary)是一个新的AS类。Dictionary类和Object唯一的区别在于:Object只能使用字符串作为键值对的键,Dictionary对象可以使用非字符串作为键值对的键。 //----------------------------------- //标签申明 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; } } } //----------------------------------- //检测鼠标离开Movie的动作 AS3允许你通过监听stage的mouseLeave行为来捕获鼠标移出Movie的动作。mouseLeave行为在鼠标移出Movie的时候执行。 但是现在并没有mouseEnter事件,不过你可以通过使用mouseMove来设置。 下面的例子中使用了一个方框来作为自定义的鼠标, 当鼠标离开Movie的时候,鼠标指针将被隐藏。当鼠标再次移动到Movie上的时候,mouseMove会被执行,然后显示鼠标。 package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.ui.Mouse; public class Test extends Sprite { private var cursor:Sprite = new Sprite(); public function Test() { cursor.graphics.beginFill(0xFF); cursor.graphics.drawRect(0, 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:MouseEvent):void { if (!cursor.visible) cursor.visible = true; cursor.x = stage.mouseX; cursor.y = stage.mouseY; evt.updateAfterEvent(); } } } //----------------------------------- //SimpleButton实例 AS3现在有一个新的类:SimpleButton(flash.display.SimpleButton)。这个类允许你通过AS创建一个按钮。 var myButton:SimpleButton = new SimpleButton();SimpleButton类有4个属性分别代表按钮的四个不同状态:upState,overState,downState和hitAreaState。你可以为每一个状态创建一个新的显示对象,然后将显示对象赋予SimpleButton的各种状态: myButton.upState = mySprite1; myButton.overState = mySprite2; myButton.downState = mySprite3; myButton.hitAreaState = mySprite4; //----------------------------------- //数组定义中的逗号 var myList:Array = [ "The", "quick", "brown", "fox", ]; 在AS1和2中,"fox"后的逗号会导致一个编译错误,但是在AS3中不会了。 //----------------------------------- //一个文件中的多个类 //在包块中最多只能定义一个类。在同一个文件中的辅助类不是包块的一部分,并且只能在此文件中可见和被使用。 package { class MyClass { function MyClass() { var helper:MyHelper = new MyHelper(); } } } class MyHelper { function MyHelper() { var helper:HelpersHelper = new HelpersHelper(); } } class HelpersHelper { function HelpersHelper () { } } //----------------------------------- //访问属性 AS3为类和类成员引入了两个新的访问属性来扩展AS2中的private访问属性。在AS3中,现在有下面的访问控制属性: public protected private internal (默认) public:public属性和AS2中一样。在任何地方定义的public属性,能在任何地方和被任何成员引用。 构造器必须定义成public。 应用程序类必须是public的。 protected:protected是一个新的属性。被protected指定的成员,只能被其本身或其子类访问。如果外部类尝试访问被protected的成员,将会抛出编译错误。 类和构造器不能被声明为protected。 private:AS2中已经有private属性,但是在AS2中,子类成员可以任意的访问父类的private成员。现在在AS3中,private属性只能在类内部被访问,其他类包括子类都不能直接访问此成员。也就是说,在子类中可以定义一个名称和父类某成员名称一样的成员,只要父类的此成员是声明为private的。 类和构造器不能被定义为private。 internal:internal和public比较类似,不同的地方在于类成员只能被同一个包中的成员所访问,而其他包中的成员不能访问。 internal是除了构造器以外的所有类和类成员的默认声明。 辅助类的访问控制有所不同。由于辅助类不属于任何包,internal的声明将限制其被访问只能是当前文件之内。注意:主类不能继承辅助类,只有辅助类能继承辅助类,并且要在同一个文件内。 package { import flash.display.Sprite; // 应用类必须定义成public (默认是internal) public class AccessControl extends Sprite { // 构造器总是public的 function AccessControl() { // 只有在这个文件中才能访问辅助类 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 set方法来访问 public var pubNum:Number = 1; // protected声明只允许在子类中被访问 protected var protNum:Number = 2; // private声明只能在类内部被访问 private var privNum:Number = 3; // internal声明只允许在同一个包中被访问 // 但是对于辅助类来说,只能在同一个文件类被访问 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 } } //----------------------------------- //抽象类 不幸的是,AS3中并没有抽象类(只能继承,不能实例化)。因此你不能在Flash中直接创建抽象类。但是,AS中的一些内置类实际上是抽象类。包括: DisplayObject InteractiveObject DisplayObjectContainer 和抽象类一样,你不能使用new关键字创建这些类的实例。例如: var myObj:InteractiveObject = new InteractiveObject(); //错误但是,除此之外,在AS中,你也不能创建这些类的直接子类,例如: package { import flash.display.DisplayObject; public class MyDisplay extends DisplayObject{ public function MyDisplay (){ // ERROR } } } 这个类在的特性和在Player中如何定义有关。如果你创建这些类的直接子类并实例化,或者直接实例化这个类,都会出现Argument Error。 因此,如果你想扩展一个抽象类,可以采用扩展抽象类的现有的internal子类的方法。例如,如果你想扩展DisplayObject,你可以扩展Shape,一个轻量级的,internal访问级别的,DisplayObject的直接子类。