Поддельный щелчок мышью по зависанию AS3 - PullRequest
1 голос
/ 27 января 2011

Этим утром я наткнулся на этот вопрос:

При наведении на кнопку можно ли нажать ее автоматически через X секунд? Значит, пользователю не нужно щелкать по нему мышью?

Как я могу позволить Flash поверить, что моя мышь действительно нажала какую-то кнопку на сцене или вызвала as3?

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

Я бы обычно использовал такой код, но есть ли обходной путь для достижения этого другим способом? Я не хочу добавлять код к каждой кнопке.

this.addEventListener(MouseEvent.OVER, onMouseClickEvent);

public function onMouseClickEvent(event:Event)
{
trace(event);
if(event.buttonDown) // if button goes down normally
trace("MOUSE CLICKED NORMALLY");
else
trace("left button was not down");
}

Ответы [ 4 ]

2 голосов
/ 27 января 2011

Я думаю, что самый простой способ - создать подкласс Button. Затем вы должны добавить слушателей мыши над / вне, добавить слушателя щелчка, который выглядит так : public function clickListener(event:MouseEvent = null){...}

Когда мышь зависает, поднимите флаг, что мышь находится на объекте, запустите таймер, и когда вызывается функция обратного вызова таймера, вы проверяете флаг if (вы выключаете флаг, когда мышь отсутствует ) верно и просто вызовите clickListener ()

1 голос
/ 27 января 2011

Прослушайте MouseEvent.MOUSE_OVER и запустите таймер, по окончании которого кнопка отправит событие MouseEvent.CLICK. В обработчике при наведении курсора используйте SystemManager, чтобы добавить прослушиватель для MouseEvent.MOUSE_OUT, который отменяет таймер. Таймер удаляет слушателя с помощью SystemManager. Так же, как и нажатие кнопки.

0 голосов
/ 19 августа 2013

(я отвечаю на это немного поздно, но хотел бы дать информацию для будущих людей).

Один из способов «снять шкуру с этого кота» - просто позволить вашему событию зависания активировать таймер (то есть 3 секунды). В EnterFrame или другой функции пусть число или логическое значение изменяются, когда достигается 3 секунды.

//Pseudo code

    if(timer == 3)
{ numberVar = 1;
//or
BooleanVar = True;
}
else
{
numberVar = 0;
//or
BooleanVar = false;
}
//end

Затем, как вы подключили свои методы к mouseEvent, подключите те же методы, чтобы они срабатывали, когда numberVar == 1 или BooleanVar == True. Вот и все.

Для супер простоты и удобочитаемости пусть ваш MouseClickEvent будет просто numberVar = 1 или BooleanVar = True.

Они становятся очень простыми для реализации с течением времени, и, по моему опыту, они "очень" защищены от ошибок. Легко исправить также в случае опечатки или чего-то еще. Нет супер неуловимого импорта тоже. Надеюсь, что это помогло.

Отличный вопрос (+ 1)

: D

0 голосов
/ 27 января 2011

Наконец-то!Решено!

Это помогло:

открытая функция runOnce (событие: TimerEvent): void {btnSignal.dispatch ("KEYBOARD", btnCode);}

Робусто и Радослав Георгиев: Спасибо, что указали верное направление!

...