AS3.0教程:强大的事件机制(2)


 [1b]如何接收事件?如何做到AS3.0的标准事件编程?[/1b]
Event改变的部分很多,这两天有空时,
[url=http://www.kingda.org/]
黑羽
[/url]
就在想怎样用一个有条理的方式来讲解Event和它相关的诸多内容,让我们感到比较容易理解,记忆和接受。
我准备这样来讲解:
先给个接受事件的代码例子。在例子中,指出:
(1) Event对象发生了什么变化
(2) addEventListener语法的不同,原因,和const型必要性和用法
(3) Listener和As2.0有何不同,和this关键字的“改进了的记忆力”
[url=http://www.kingda.org/]
黑羽
[/url]
一贯的风格,先来一个例子。我很想给个短一点的代码例子,但是要达到清楚,全面和标准的示范,我还是决定采用这个Document Class的示例。我会在每个代码段注一些注释,大家不明白的地方回贴说一下,我会尽量解答。
Document Class的含义和相关用法并不难,忘了的兄弟看我第3篇教程:
[url=http://www.kingda.org/archives/kingda/2006/07/as303document_class.html]
AS3.0教程(3):Document Class特色为我们带来了什么?
[/url]
好,come on baby.
新建一个as文件,拷贝以下代码,命名为AddListener.as。
新建一个fla,命名为 "黑羽黑羽我爱你.fla"(本教程推荐使用,倘若不遵从可能导致喝凉水塞牙泡MM被踢炒股被套等严重后果,霍哈哈。Just kidding。)。设置它的文档类(Document Class)为AddListener.
  //【黑羽】ActionScript 3.0系列教程(6)
  //http://www.kingda.org
package {
    import flash.display.Sprite;
    import flash.events.MouseEvent;   
   //哈哈,看到了没,Document Class不仅可以扩展MovieClip,也可以扩展Sprite
   //package里面的类名要和文件名相同
    public class AddListener extends Sprite {
        public function AddListener() { 
            //用package外面定义的类KingdaSprite创建一个实例,由于同文件中,所以不用import啦
            var outsideChild:KingdaSprite = new KingdaSprite(0x00FF00, "outside_sprite");
       addChild(outsideChild);//没有了这一句,你啥都看不到。
            outsideChild.addEventListener(MouseEvent.CLICK, inclassHandler);//注册类里面的侦听器
            outsideChild.addEventListener(MouseEvent.CLICK, outsideHandler);//注册类外面的侦听器                      
        }
        private function inclassHandler(event:MouseEvent):void {
            trace("类里面的侦听器侦听到MouseEvent事件: " + event);
  trace("this关键字指向:"+this);
        }
    }
}
function outsideHandler(event:MouseEvent):void {
      trace("类外面的侦听器侦听到MouseEvent事件: " + event);
      trace("this关键字指向:"+this);
}
import flash.display.Sprite;
import flash.events.MouseEvent;
//这个类就是画一个矩形,然后你点击这个矩形会发出标准鼠标click的事件
class KingdaSprite extends Sprite {
public var nickname:String;
public var ColorNum:uint;
   //colorNumber就是#ffcc00这种类型的数,在AS3中推荐用新的uint型来标记它
    public function KingdaSprite(colorNumber:uint, nameString:String) {
        ColorNum = colorNumber;
        nickname = nameString;                
        graphics.beginFill(ColorNum);
        graphics.drawRect(0,0,100,100);
        graphics.endFill();
    }
}
鼠标一点击创建出来的绿色矩形,会看到输出
类里面的侦听器侦听到MouseEvent事件: [MouseEvent type="click" bubbles=true cancelable=false eventPhase=2 localX=64 localY=80 stageX=64 stageY=80 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0]
this关键字指向:[object AddListener] 
类外面的侦听器侦听到MouseEvent事件: [MouseEvent type="click" bubbles=true cancelable=false eventPhase=2 localX=64 localY=80 stageX=64 stageY=80 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0]
this关键字指向:[object global]
 
演示完毕,我们来讲第一个话题
(1) Event对象发生了什么变化
AS2.0中创建event 对象是很随意的,只要这个对象有一个String属性叫做type的就可以了,甚至连target都可以省掉。不要以为这不规范不应该做,看看Flash类源码,Macromedia的程序员可不只一次的这样使用过。所谓上梁不正下梁歪,就是这样。(其实严格说也没什么不对,有时候是不需要target。但没有标准就是不好)
本文转自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/1762.html

你可能感兴趣的:(编程,Flash,actionscript)