Этот вопрос относится не только к типу событий MouseEvent.CLICK, но и ко всем типам событий, которые уже существуют в AS3. Я много читал о пользовательских событиях, но до сих пор не мог понять, как делать то, что я хочу делать. Я попытаюсь объяснить, я надеюсь, вы понимаете:
Вот иллюстрация моей ситуации:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, doSomething);
}
function doSomething(e:MouseEvent){ /* */ }
Но я хочу иметь возможность передать someVar в качестве параметра doSomething . Итак, я попробовал это:
for(var i:Number; i < 10; i++){
var someVar = i;
myClips[i].addEventListener(MouseEvent.CLICK, function(){
doSomething(someVar);
});
}
function doSomething(index){ trace(index); }
Такого рода работы, но не так, как я ожидаю. Из-за замыканий функций, когда события MouseEvent.CLICK фактически запускаются, цикл for уже завершен, а someVar содержит последнее значение, число 9 в примере. Поэтому каждый клик в каждом мувиклипе будет вызывать doSomething , передавая 9 в качестве параметра. И это не то, что я хочу.
Я думал, что создание пользовательского события должно сработать, но тогда я не смог найти способ вызвать пользовательское событие, когда событие MouseEvent.CLICK сработало, и передать ему параметр. Теперь я не знаю, правильный ли это ответ.
Что мне делать и как?