2013-02-19 2 views
0

У меня проблема с очень простым кодом.As2: Создание функции в цикле

for(i=1;i<3;i++){ 
     _root.otoczenie["z"+i].onPress = function() 
     { 
      trace(i) 
     } 
    } 

Почему каждый MovieClip (z1 или z2) возвращает «1» на трассировку и как ее строить другим способом.

ответ

0

Во-первых, это должно отслеживать «3» при нажатии пунктов.

Проблема в том, что все ваши функции отслеживают значение «i», которое последним затронуто «за».

Вы должны присвоить значение для каждого объекта, например:

for(var i:Number = 1; i <= 2 ; i++) { 
    _root.otoczenie["z"+i].myValue = i; 
    _root.otoczenie["z"+i].onPress = function() { 
     trace(this.myValue); 
    } 
} 

Лучше всего было бы использовать делегирование и использовать общую функцию:

for(var i:Number = 1; i <= 2 ; i++) { 
    _root.otoczenie["z"+i].myValue = i; 
    _root.otoczenie["z"+i].onPress = mx.utils.Delegate.create(this,onItemPressed); 
} 

function onItemPressed() { 
     trace(this.myValue); 
} 
Смежные вопросы