AS3使用自定义事件更改不同类的属性

时间:2014-04-15 21:32:58

标签: actionscript-3 flash

在我正在制作的游戏中,您选择一个形状,然后在下一个屏幕上选择一种颜色。形状选择器工作正常,并加载6'形状中的一种。电影剪辑进入游戏的下一个阶段。在这个舞台上,我有按钮来控制颜色。我试图通过启动自定义事件使按钮更改动画片段的颜色。然后,每个动画片段中的类中的侦听器将检测到这一点。

到目前为止,这是我的代码:

包含颜色更改按钮的屏幕:

package  {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class ColorSelector extends MovieClip
    {

        public function ColorSelector() 
        {

            charcoal.addEventListener (MouseEvent.CLICK, onClickCharcoal );
        }


        public function onClickCharcoal (mouseEvent:MouseEvent): void
        {
            dispatchEvent (new ColorEvent (ColorEvent.CHARCOAL) );
            trace ("click")
        }}

自定义事件类:

package
{
    import flash.events.Event;

    public class ColorEvent extends Event
    {
        public static const CHARCOAL:String = "charcoal";

        public function ColorEvent( type: String )
        {
            super ( type );
        }
    }}

正在采取行动的影片剪辑:

package  {

    import flash.display.MovieClip;


    public class Gobbert extends MovieClip {


        public function Gobbert() 
        {
            this.addEventListener (ColorEvent.CHARCOAL, makeCharcoal)
        }


        public function makeCharcoal (colorEvent: ColorEvent) :void
        {
            this.alpha = .5
        }
    }

在我看来,事件并没有通过听众进入班级。我真的可以用一双新鲜的眼睛帮我弄清楚发生了什么。该程序没有给我任何错误,也没有做太多其他事情。提前谢谢!

1 个答案:

答案 0 :(得分:0)

您在构造函数中缺少bubbles参数。如果省略,则默认为false。在自定义事件上调用super应该是:

super(type, bubbles, cancelable);

您需要通过addEventListener函数调用或自定义事件构造函数内的硬代码将气泡传递为true。

还要确保目标(Gobbert实例)影片剪辑位于事件冒泡路径上,这意味着ColorSelector必须是Gobbert显示列表的子代。如果您的显示列表没有以这种方式设置,您可能需要重新考虑您的方法,并将事件从选择器传播到公共父级,然后通过该公共父级在Gobbert上设置颜色。