菜鸟走在AS3的路上――onEnterFrame事件应该怎么用?

菜鸟走在AS3的路上――onEnterFrame事件应该怎么用?

onEnterFrame函数在AS2时代可谓威风八面,没有谁对这个事件不熟悉的。到了AS3到底怎么用呢?我认真学习了下。
addEventListener 函数为某事件指定一个侦听器。输入要侦听的事件名称以及要执行处理的函数名称。看一个例子:
addEventListener("enterFrame", onEnterFrame);
在加入事件侦听器时,可使用可选参数,这儿的事件名"enterFrame"为字符串型,有人戏称它为“魔力字符串”(Magic String)。为什么这么叫?如果你误输入成了"entorFrame",尽管没有这个事件名称,编译器也会编译执行它,但会发现事件处理函数没有执行。除了使用“魔力字符串”以外,还可以使用事件类(Event Class)的属性。例如:
addEventListener(Event.ENTER_FRAME, onEnterFrame);
实际上 Event.ENTER_FRAME 的值就是”enterFrame”这个字符串。所以推荐这样使用。
另外,这儿的事件处理函数是onEnterFrame,在 AS 3 中,可以任意地命名,比如这样写都行的:
addEventListener(Event.ENTER_FRAME, 下点小雪吧);

但是因为我们在AS2中已经习惯使用这个名称,所以还是用这个吧。谁都一看就懂了。如果要停止这个事件侦听,就用 removeEventListener 方法解除该成员;就是告诉对象从侦听器列表中删除该侦听器,这样一来,他就不会再接收信息了。
手痒了,快来试试吧:
步骤:
1、在库中创建一个雪花飘落的影片剪辑,在元件属性中选择为 ActionScript 导出。在以前的 Flash 版本中,可以自由地给出标识符或输入一个类名。而在 Flash CS3 中,标识符一栏不可用了,类一栏会自动地填入默认值。这里还多出了基类一栏,默认为flash.display.MovieClip,这里也可以填入继承自 MovieClip 或 Sprite 的自定义类。随意输入一个类名叫“xiaxue”,不必担心没有这个类,然后点击确定。这个地方很有趣,Flash 找不到这个类,它就会自动生成一个类,并对其进行编译。并不是说 Flash 会创建一个ActionScript 类文件,但它会在 SWF 中,生成一串字节代码表示一个继承自 Sprite 或MovieClip 的类。除了继承了基类,它什么都不会做,但它已经与库中的元件连接上了。这点是从康老那儿学来的,学以致用嘛。
2、创建文件类,叫帧频事件.as。写入代码:

package {
    import flash.display.Sprite;
    import flash.display.MovieClip;
    import flash.events.Event;
    public class 帧频事件 extends Sprite {
        var i:Number = 1;
        public function 帧频事件() {
            下雪();
        }
        private function 下雪():void {
            addEventListener(Event.ENTER_FRAME,下小雪吧);
        }
        function 下小雪吧(event:Event):void {
            var 雪花:xiaxue= new xiaxue();
            addChild(雪花);

            雪花.x = Math.random()*550;
            雪花.scaleX = 0.2 + Math.random();
            雪花.scaleY = 0.2 + Math.random();
            i++;
            if (i>100) {
                this.removeChildAt(1);
                i=100;
            }
        }
    }
}
开始下雪了吧?OK

几点体会
1.康老讲过的讲过生成 Sprite 或 MovieClip 类的子类,对某个类进行子类化是非常有用的。它代替了 AS 2中attachMovieClip 功能,我们想从库中取出影片剪辑元件放入舞台的方法就是使用一个继承自 MovieClip 或 Sprite 的类。它除了继承了基类,它什么都不会做,但它已经与库中的元件连接上了。然后写:

var 雪花:xiaxue= new xiaxue();
addChild(雪花);
  
  这样就在舞台上创建了一个库中的元件,就像 AS 2 的 attachMovie 方法一样。我们要是能给出自定义的真正的类名及路径的话,那么就可以让元件附加很多功能。

当然仅此还不够,在AS3中attachMovie已经消失了,AS3中,用 new 来创建任何可视元素,在需要用的时候把它加到舞台上,不用的时候移除下来,等到再用的时候,还可以再放上去就是。
放的这个语句就是:addChild(雪花);
//字面意思是把孩子通过文档类加到舞台上,呵呵,原先他在后台休息啊,因此非常方便。由于这个特点,不同swf 里面的元件可以相互使用了,比如你在 swf1 的库里面做了一个图标,绑定的类是“类1”,你可以把 swf1 加载到 swf2 中,然后通过 new 类1()创建一个那个图标,然后通过 addChild()方法把它加到 swf2 的舞台上。这样就不需要使用共享库功能了。
专业地这个叫“显示列表”,AS 2 中,显示列表的用法是:
用 attach 或 createEmptyMovieClip 方法创建影片剪辑,必须指定它位于树的哪个位置。这样一来,影片剪辑要放置在列表的指定位置。当删除该影片时,同样也无法改变它在列表中的位置或在列表中移除它。
在 AS 3 中,创建了一些 Sprite 影片后,不会自动被加入显示列表。也不涉及父级影片或深度的问题,这样就可以在它没有加入视觉列表之前就对其进行操作了。
当然使用 removeChild 方法,从显示列表中删除一个对象,并以该对象的名字作为参数。不是去毁灭它,对象依然保持原样,只是暂时被移除到“后台”,当再次被加入到显示列表中,对象仍保持原来的状态。
2、duplicateMovieClip() 已删除。 在 ActionScript 3.0 中,使用 new 运算符来创建新的实例。这个再不罗嗦了.
疑难问题:我查了资料说复制元件的方法有六种之多,请教各位老师还有哪些方法可以做到?
谢谢了
Flash动画




文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 2 | 引用: 0 | 查看次数: -
回复回复高原红[2009-06-08 10:03 AM | del]
欢迎新朋友,握手
回复回复孤影寒星[2009-06-02 02:32 PM | del]
谢谢楼主 学了不少东西呢
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.