Как отключить щелчок мышью после нажатия на объект? - PullRequest
1 голос
/ 26 июля 2011

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

Вот код:

public function bottleHasClicked(bottle : BottleBase) : void {
        bottle.mouseEnabled = false;
        collectedBottles++;
        bottlesInRound--;

        gameSound.getShootSound().playSound();
        gameSound.getBottleSound().playSound();


        ArrayUtil.removeValueFromArray(elementsInScreenArray, bottle);
        cleanElementsTimer[bottle].stop();
        delete cleanElementsTimer[bottle];

        if (bottlesInRound == 0) {  
            stopElementsTimer();
            showElementsWaitForSeconds(0.5);
        }

        createBulletHole();
        bottle.play();
    }

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

Ответы [ 3 ]

1 голос
/ 26 июля 2011

См. это сообщение :

Если у вас есть только один элемент, для которого требуется отключить мышь, используйте свойство mouseEnabled.Однако, если у вас есть дочерние элементы в конкретном объекте, для которого вы хотите каскадно отключить события мыши, обязательно установите также свойство mouseChildren.Эта вторая схватила меня раньше, когда я все еще получал ответ на события мыши, хотя я и думал, что отключил их.

0 голосов
/ 26 июля 2011

Ну, я полагаю, есть несколько способов сделать это, но это зависит от того, как вы регистрируете события щелчка мышью. Если вы вызываете addEventListener (MouseEvent.Click, ...) для каждой из ваших пуль, чтобы в конечном итоге добраться до bottleHasClicked, вы можете просто удалить прослушиватель объекта, вызвав removeEventListener (...);

Если вы используете такой другой метод, другой простой способ сделать это - просто добавить логическое значение, чтобы проверить, была ли бутылка нажата (давайте назовем эту переменную wasClicked, и конструктор бутылки должен установить ее в false ). В этом случае вы можете изменить приведенный выше код на что-то вроде этого:

public function bottleHasClicked(bottle : BottleBase) : void 
{
    if(!bottle.wasClicked)
    {
        bottle.wasClicked = true;
        bottle.mouseEnabled = false;
        collectedBottles++;
        bottlesInRound--;

        gameSound.getShootSound().playSound();
        gameSound.getBottleSound().playSound();


        ArrayUtil.removeValueFromArray(elementsInScreenArray, bottle);
        cleanElementsTimer[bottle].stop();
        delete cleanElementsTimer[bottle];

        if (bottlesInRound == 0) {  
            stopElementsTimer();
            showElementsWaitForSeconds(0.5);
        }

        createBulletHole();
        bottle.play();
    }
}

Это должно сработать.

0 голосов
/ 26 июля 2011

Разве у вас нет "игровой" переменной в классе бутылок?Вы можете проверить это прямо перед вызовом bottleHasClicked ().Также поможет вызов addListener.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...