AS3 - 如何在事件处理函数中获取对象的名称?

时间:2011-12-17 03:46:49

标签: flash actionscript-3 actionscript

以下是我的AS3代码:

    public function load_swfs(event:Event)
    {
        var loader:Loader = event.target.getChildAt(0) as Loader;
        var mc:MovieClip = loader.content as MovieClip;
        var mc_name = 'somethingGeneratedElsewhere';
        this.animations[mc_name] = mc;
    }

    // --------------------------------------------------------------------
    public function add(mc_name)
    {
        //this.animations is a object that holds a bunch of dynamically loaded SWF files.
        addChild(this.animations[mc_name]);
        this.animations[mc_name].addEventListener(Event.ENTER_FRAME, enter_frame_handler);
    }

    // --------------------------------------------------------------------
    public function enter_frame_handler(e:Event)
    {
       //how do I get mc_name in this function
       // Example, if I run add('movie123'). How do I get 'movie123' in this function?
    }

如果我运行add('movie123')。如何在enter_frame_handler函数中获取字符串'movie123'?

更新

此论坛帖子(Click Here)描述了我遇到的问题,但没有提供我正在寻找的解决方案。幸运的是,@ kapep提供了一个解决问题的简单解决方案。

5 个答案:

答案 0 :(得分:3)

其他解决方案通常是更好的选择。如果无法动态添加属性,则仍可以使用Dictionary将对象映射到名称。

private var animationNames:Dictionary = new Dictionary();

public function add(mc_name)
{
    // store animation object and the name
    animationNames[this.animations[mc_name]] = mc_name; 

    addChild(this.animations[mc_name]);
    this.animations[mc_name].addEventListener(Event.ENTER_FRAME, enter_frame_handler);
}

// --------------------------------------------------------------------
public function enter_frame_handler(e:Event)
{
    var name:String = animationNames[e.currentTarget];
    // ...
}

无论如何,请记住this.animations[mc_name]并没有真正使用动画片段名称,并且无法以这种方式获取变量名称。如果你做this.animations[some_other_name] = this.animations[mc_name];,你会有两个变量引用同一个对象。没有办法告诉哪个变量用于附加监听器。因此,请确保您了解movieclip名称与其变量名称之间的区别。

答案 1 :(得分:2)

public function eventListener(e:Event)
{
    var target:MovieClip = (e.target as MovieClip);
    // Target is the object that dispatched the event.
}

答案 2 :(得分:2)

首先需要命名影片剪辑,然后使用e.currentTarget.name

检索其名称
// --------------------------------------------------------------------
public function add(mc_name)
{
    //this.animations is a object that holds a bunch of dynamically loaded SWF files.
    addChild(this.animations[mc_name]);
    this.animations[mc_name].name = mc_name; // IMPORTANT - name the MovieClip
    this.animations[mc_name].addEventListener(Event.ENTER_FRAME, enter_frame_handler);
}

// --------------------------------------------------------------------
public function enter_frame_handler(e:Event)
{
    trace(e.currentTarget.name);
}

答案 3 :(得分:2)

public function eventListener(e:Event)
{
    var target:MovieClip = (e.target as MovieClip);
    trace(target.name); // should return the name
}

答案 4 :(得分:0)

如果你正在寻找它的索引

,你可以使用这一行

迹(stage.getChildIndex(影片剪辑(event.target)));