Кнопка AS3 перестает работать после случайного количества кликов - PullRequest
1 голос
/ 29 октября 2010

У меня есть мувиклип, используемый в качестве кнопки.После случайного количества нажатий кнопка перестает работать.Другими словами, мышь станет рукой при наведении курсора на кнопку, но щелчки не регистрируются для запуска функции.Я даже щелкнул 40 раз, и он будет работать, но потом вдруг, чёрт!, Он перестает работать.Вот функция, которая добавляет btn, слушатель, анимирует его на экран, а также добавляет текст.

function makeButton():void{
addChild(myBtn);
myBtn.mouseChildren=false;
myBtn.buttonMode=true;
myBtn.x=(stage.stageWidth/2)-(myBtn.width/2);
myBtn.y=-300;
myBtn.addEventListener(MouseEvent.MOUSE_DOWN, btnClicked, false, 0, true);
myBtn.btn_text.text="The string goes here";
TweenLite.to(myBtn, 0.5,{x:(stage.stageWidth/2)-(myBtn.width/2),y:(stage.stageHeight/2)-(myBtn.height/2)});
}

А затем вот функция, которая анимирует кнопку за пределами экрана:

function btnClicked(e:MouseEvent):void{
myBtn.removeEventListener(MouseEvent.MOUSE_DOWN, btnClicked);
TweenLite.to(myBtn, 0.5,{x:(stage.stageWidth/2)-(myBtn.width/2),y:-300});

}

Странно то, что я добавил след («добавлен слушатель») в makeButton () В ОЧЕНЬ КОНЕЦ, ПОСЛЕ ДОБАВЛЕНИЯ.И он отслеживает каждый раз, даже когда кнопка перестает работать.Так что я могу только предположить, что нет никаких ошибок при добавлении слушателя.Но тогда почему это не работает?

Я в тупике.Я думал, что это может быть проблемой распространения событий.Другими словами, слушатель был добавлен к цели (myBtn), но каким-то образом он захватывал или пузырился неправильно, но ..... тогда почему он вообще работает?И за столько кликов?

Истина там.Или, может быть, здесь, ваши идеи будут высоко оценены.

Ответы [ 3 ]

0 голосов
/ 29 октября 2010

Добавление оператора trace в функцию makeButton только скажет вам, что кнопка создана, но ничего не скажет о функциональности вашей кнопки. Если вы хотите проверить, реагирует ли ваша кнопка на нажатие, вам нужно добавить оператор трассировки в прослушиватель щелчков.

Согласно вашему описанию, похоже, что вы продолжаете добавлять одну и ту же кнопку на сцену, а не нажимаете одну и ту же кнопку.

Как часто вы вызываете функцию makeButton, прежде чем она перестает работать? Эта функция выглядит так, как будто ее нужно вызывать только один раз. Что касается функции btnClicked, почему вы удаляете слушателя, если хотите снова нажать кнопку?

Практически похоже, что в ваших функциях должна быть только функция Tweening, я имею в виду, что после создания кнопки вам нужна одна функция для изменения кнопки, затем вместо добавления кнопки просто вызовите функцию для tween кнопка вернулась на место.

Все остальное не должно повторяться.

0 голосов
/ 30 октября 2010

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

С учетом сказанного мой код стал намного чище, поскольку addChild и другая хрень работают в функции инициализации и просто сидят над сценой, а затем переходят в положение в функциях 'makeButton' и 'btnClicked'.(которые теперь правильно названы 'tweenBtnIn' и 'tweenBtnOut').

Еще раз спасибо

0 голосов
/ 29 октября 2010

Где создается myBtn?В самом начале makeButton () я вижу, что вы добавляете его в список отображения, но не видите, где он на самом деле создается?Это уже на сцене?

...