Button按实例名称,Actionscript-3

时间:2010-07-19 23:02:18

标签: flash actionscript-3

我很习惯于时间轴代码,这让我感到困惑。我如何获得一个按钮 class来识别舞台上的按钮实例?
请帮忙。

......刚刚修改过 Buttons.fla

Class: 'Buttons'
Button with instance name placed on stage

Buttons.as

package {
    import flash.display.MovieClip;
    public class Buttons extends MovieClip {

         public function Buttons() {
         mc.addEventListener(MouseEvent.MOUSE_DOWN, onClick);
         stage.addChild(this);

         }

         public function onClick(event:MouseEvent):void{
             trace("Hello World");
         }
    }  
}

错误:
1120:未定义的财产
该错误表示它是鼠标事件,而不是我的实例名称mc。

LINK TO THE FILE

3 个答案:

答案 0 :(得分:2)

你缺少大括号和mc的定义以及MouseEvent的导入(上面问题的根源):

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

    public class Buttons extends MovieClip {

         public function Buttons() {
             //it's better to use "this" here instead of adding another
             //instance of movieclip named "mc"
             this.addEventListener(MouseEvent.MOUSE_DOWN, onClick);
         }

         public function onClick(event:MouseEvent):void{
             trace("Hello World");
         }
    }  
}

当然,有几种其他/更好的方法可以实现这些相同的结果,但这至少应该解决您的编译问题。现在,要将其添加到舞台上,您需要将其添加到存在的内容中。一种简单的方法是将以下行放在 this.addEventListener 下面:

stage.addChild(this);

如果您对此工作有其他疑问,请与我们联系。我希望能指出你正确的方向,

- gMale

编辑:

回应下面的评论a link to the Flash files。我试图遵循你正在做的事情的意图。在IDE中编码了一个快速可点击按钮,另一个快速点击按钮编码在单独的* .AS文件中:

答案 1 :(得分:1)

这可能有助于'mc'实例

package {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    public class Buttons extends MovieClip {
         public function Buttons() {
           //it's better to use "this" here instead of adding another
           //instance of movieclip named "mc"
         this.addEventListener(MouseEvent.MOUSE_DOWN, onClick); 
         }
         public function onClick(event:MouseEvent):void{
           trace("Hello World");
         //PASS IT INTO THE BRACKETS
         stage.addChild(mc);//<--------------------------
         }
    }  
}

答案 2 :(得分:1)

要访问在IDE中创建的实例,您需要使用[]语法调用它们,这可以:

package {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    public class Buttons extends MovieClip {

         public function Buttons() {
         this["mc"].addEventListener(MouseEvent.MOUSE_DOWN, onClick);
         //stage.addChild(this); // this is really not useful
         }
         public function onClick(event:MouseEvent):void{
             trace("Hello World");
         }
    }  
}

还要注意您需要导入MouseEvent。 :)

如果你真的需要能够通过mc访问你的按钮,它需要更多的代码:

package {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    public class Buttons extends MovieClip {

         protected var mc:MovieClip;

         public function Buttons() {

            if(this["mc"] is MovieClip){
              mc = this["mc"];
            }else{
              //you probably want to create it if not found on the stage.
            }
         mc.addEventListener(MouseEvent.MOUSE_DOWN, onClick);
         }
         public function onClick(event:MouseEvent):void{
             trace("Hello World");
         }
    }  
}

希望这有帮助。