AS3 - Как я могу получить имя объекта в функции обработчика событий? - PullRequest
0 голосов
/ 17 декабря 2011

Ниже приведен мой код 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').Как получить строку 'movie123' в функции enter_frame_handler?

ОБНОВЛЕНИЕ

В этом сообщении на форуме ( Нажмите здесь ) описаны проблемы, которые яу меня есть, но не предоставляет решение, которое я ищу.К счастью, @kapep предоставил простое решение, которое решило проблему.

Ответы [ 5 ]

3 голосов
/ 17 декабря 2011

Другие решения, как правило, являются лучшими вариантами. Если вы не можете динамически добавлять свойства, вы все равно можете сопоставить объекты с именами, используя 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];, у вас будет две переменные, ссылающиеся на один и тот же объект. Не было бы никакого способа сказать, к какой переменной привыкли присоединять слушателя. Поэтому убедитесь, что вы понимаете разницу между именем мувиклипа и именем его переменной.

2 голосов
/ 17 декабря 2011

Сначала необходимо назвать имена видеоклипов, затем вы можете получить их названия, используя 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);
}
2 голосов
/ 17 декабря 2011
public function eventListener(e:Event)
{
    var target:MovieClip = (e.target as MovieClip);
    trace(target.name); // should return the name
}
2 голосов
/ 17 декабря 2011
public function eventListener(e:Event)
{
    var target:MovieClip = (e.target as MovieClip);
    // Target is the object that dispatched the event.
}
0 голосов
/ 27 января 2013

Или вы можете использовать эту строку, если вы ищете ее индекс

trace (stage.getChildIndex (MovieClip (event.target)));; 1003 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...