2011-01-24 2 views
0

Я пытаюсь отправить идентификатор через прослушиватель событий в его функцию прослушивания. Теперь это работало до того, как я создал кнопки только с использованием кода, но когда я решил использовать существующие клики, он остановился, и я не могу понять, почему.Проблемы с попыткой получить идентификатор из eventLlistener

Вот мой код кнопки.

private function addButtons(){ 
     button1 = new ButtonMC(); 
     //add the buttons 
     button1.id = 1; 
     button1.addEventListener(MouseEvent.CLICK, gameClick, false, 0, true); 
     button1.buttonMode = true; 
     addChild(button1); 
     trace("button1 = "+button1.id); 

}

след находит button1.id никаких проблем. Так хорошо до сих пор. Когда я запустил это, функция-слушатель отчитается как «undefined». Вот мой код функции слушателя. (не все это .. только соответствующая часть).

private function gameClick(evt:MouseEvent):void{ 
     trace("clicked "+evt.target.id); 
     var gameTypeID = evt.target.id; 

}

Этот код находится в своем собственном отдельном классе, который генерирует стартовый экран. Кнопки movieClip являются дубликатами MC в библиотеке, которая экспортируется как ButtonMC. Я совершенно не понимаю, почему это сейчас не работает. Когда он работал с «сгенерированными» кнопками, где все еще были обычные клики, поэтому я не вижу здесь никакой разницы. Возможно, это предмет с областью видимости, но со всем этим кодом в одном классе я не понимаю, почему это будет проблемой.

Может ли кто-нибудь указать мой идиотизм и сообщить мне, пожалуйста? Ваша помощь, как всегда, очень ценится.

+0

try casting evt.target как ButtonMC: trace ("clicked" + ButtonMC (evt.target) .id); или попробуйте использовать evt.currentTarget.id – TheDarkIn1978

+0

Что вы имеете в виду отчеты как неопределенные. Это ошибка? Я запускал этот код с помощью flex, с обычным объектом Button, и все было в порядке. – Ryan

ответ

1

target Недвижимость, пришедшая с событиями мыши, ссылается на DisplayAsset, на самом деле щелкнув - в этом случае, некоторые другие DisplayAsset внутри ваша кнопка. Вероятно, вы заметите, что target - это кнопка (или parentparent и т. Д.).

Во всяком случае, использовать currentTarget вместо того, чтобы получить цель, которая была добавлена ​​событие, или установить mouseChildren в false для кнопки (таким образом, его дети не будут захватывать себя события мыши).

+0

Это блестяще .. Спасибо всем, кто ответил. Использование currentTarget отлично работало. Zeh, вы были правы в том, что eventListener нацелился на что-то еще в кнопке. Я добавил пустой клип-клип под графикой в ​​виде хита. Я понятия не имел, что он не будет считать всю кнопку одним клипом. Кажется, вы узнаете что-то новое каждый день с AS3. – barry

3

Мое первое предположение состояло в том, что фактическая фигура или спрайт, который нажал в пределах экземпляр ButtonMC, зарегистрирован как event.target. Вы можете проверить эту теорию и отслеживать getQualifiedClassName (event.target) в своем слушателе. Или вы можете попробовать исправить сразу и добавить button1.mouseChildren = false;, чтобы узнать, работает ли он.