Как я могу добавить другой слушатель для того же мувиклипа в цикле в as3? - PullRequest
0 голосов
/ 12 сентября 2011

Я пытаюсь кодировать часть программы, которая создает другого слушателя для одного и того же объекта, используя for, но проблема в том, что результат для всех них одинаков. В следующем вы можете найти мой код :

for( var i:int=0;i<10;i++){


    var obj =  new MyClass();
    obj.y = i*30;


    obj.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent){
        value = i.toString();
        trace(value);
    });

    myOtherMovieClip.addChild(obj);
}

Моя цель написания приведенного выше кода состоит в том, что, нажав на первый объект, программа записывает 0 в выводе, нажимая на второй, пишет 1 и так далее, но этот код дает мне 10 для всех объектов.

Я должен добавить, что независимо от того, есть ли объект в области myOtherMovieClip или нет, щелкнув эту область, я получу одно и то же значение.

Любая идея будет оценена, Спасибо

Ответы [ 3 ]

1 голос
/ 12 сентября 2011

Чтобы решить вашу проблему напрямую, вы можете сделать это:

obj.addEventListener(MouseEvent.MOUSE_UP, function():Function{
    var value : String = i.toString();
    var listener : Function = function(e:MouseEvent):void{
        trace(value);
    }       
    return listener;
}());
1 голос
/ 12 сентября 2011

Лучший способ достичь этого - установить свойство value для объекта MyClass.

Или, технически, если свойство y постоянно, вы можете сделать:

var value:String = (e.target.y / 30).toString();
0 голосов
/ 12 сентября 2011

Есть простое исправление. ID вашего объекта.
Конечно id должен быть свойством на MyClass

for( var i:int=0;i<10;i++){
  var obj =  new MyClass();
  obj.y = i*30;

  obj.id = 'someMC_' + i
  obj.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent){
    var aVar:Array = e.target.id.split('_')
    trace(aVar[1]);
  });
  myOtherMovieClip.addChild(obj);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...