如何在AS3中的currentTarget对象的事件期间访问类函数

时间:2014-11-21 22:37:09

标签: actionscript-3 flash event-handling

我已经将movieClip加载到舞台上并且正在该movieClip上执行一些事件。影片剪辑具有自己的公共函数和变量,并且不能通过事件中的currentTarget对象访问它们。

以下是示例类:

package {
    import flash.display.MovieClip;
    import flash.display.Shape;
    public class SampleClass extends MovieClip {
        var str:String;
        public function SampleClass() {
            str="Some string";
            /* draw just a sample rectangle to click on it */
            var rectangle:Shape=new Shape  ;
            rectangle.graphics.beginFill(0x000000);
            rectangle.graphics.drawRect(0,0,100,100);
            rectangle.graphics.endFill();
        }
        public function getStr():String {
            return str;
        }
    }
}

这里正在加载舞台并创建活动:

package {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    public class MainClass extends MovieClip {
        var a:SampleClass;
        public function MainClass() {
            a=new SampleClass();
            addChild(a);
            a.addEventListener(MouseEvent.CLICK,clickEvent);
        }
        function clickEvent(evt:MouseEvent):void {
            var Obj=evt.currentTarget;
            trace (Obj.getStr());
        }
    }
}

跟踪将返回null而不是string值因为currentTargetObject,而不是Class(movieClip)。知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

//使用此代码可以使用

 function clickEvent(evt:MouseEvent):void {
        var Obj:SampleClass = evt.currentTarget as SampleClass;
        trace (Obj.getStr());
 }

答案 1 :(得分:0)

我不知道您的问题现在是否已解决,但您在问题中发布的代码对我来说没问题。

我做了什么测试..

  1. 在新的空白文档中,打开(ctrl + L)并右键单击以制作符号(MovieClip)
  2. 关联部分,勾选导出for Actionscript 并将其命名为 SampleClass
  3. 右键单击现在添加到库列表中的符号项,然后选择编辑类选项
  4. SampleClass 中,我用代码粘贴替换了所有 但是注意: 在该行rectangle.graphics.endFill();之后..我还添加了行addChild(rectangle);
  5. 现在我测试时(Debug:Ctrl + Shift + Enter)..我看到一个跟踪的黑色方块"一些字符串"每次我点击它..
  6. 您的 MainClass.as 作为文档类附加到FLA(使用Ctrl + F3参见属性

    我希望这对您或尝试此类代码的任何其他人都有用。任何问题只是添加评论。感谢。