в зависимости от того, как вы хотите, чтобы это работало, я сделал бы это следующим образом:
- создать анимацию волнистого кофе
- обеспечить анимацию циклов
- обратите внимание, что клип по умолчанию зацикливается, поэтому все, что вам нужно сделать, это сопоставить первый и последний кадры!
- поместите клип на край вашей текущей кофейной графики
- двойной щелчок по графику для его редактирования
- перетащите экземпляр цикличной анимации из библиотеки на «край» графика
- ИЛИ просто замените всю свою светло-коричневую графику на анимированную, которая зацикливается
- когда мышь движется, вызовите воспроизведение на анимированном цикле клипа
- когда мышь останавливается, вызовите остановку на анимированном цикле
Пример кода будет выглядеть следующим образом:
public function init():void {
menuClip.addEventListener(MouseEvent.MOUSE_OVER, onMenuRollOver);
menuClip.addEventListener(MouseEvent.MOUSE_OUT, onMenuRollOut);
}
public function onMenuRollOver(event:MouseEvent):void {
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
/* do the stuff you're currently doing to animate the clip here.
something like: coffee graphic height = ease to mouseHeight */
}
public function onMenuRollOut(event:MouseEvent):void {
/* do the stuff you're currently doing to stop the clip here. */
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
coffeeClip.stop();
}
public function onMove(event:MouseEvent):void {
resetTimer();
coffeeClip.play(); //note: play has no effect when movie is playing (that's ideal in this case)
}
public function resetTimer():void {
if(mouseMovementTimer == null) createTimer();
mouseMovementTimer.reset();
mouseMovementTimer.start();
}
public function createTimer():Timer {
mouseMovementTimer = new Timer(DELAY, 1); //fiddle with the delay variable. Try 500, at first
mouseMovementTimer.addEventListener(TimerEvent.TIMER, stopAnimationLoop);
}
public function stopAnimationLoop(event:TimerEvent):void {
mouseMovementTimer.removeEventListener(TimerEvent.TIMER, stopAnimationLoop); //optional but recommended
mouseMovementTimer = null;
coffeClip.stop();
}
Конечно, вам необходимо выполнить такие действия, как вызов init()
, импорт flash.utils.Timer
и инициализация переменных, таких как mouseMovementTimer, menuClip, coffeeClip и DELAY.
Предупреждение. Этот код находится на моей голове и не проверен. Таким образом, в нем могут быть небольшие ошибки, но вы должны получить общее представление:
- добавить слушателя мыши, когда пользователь наводит мышью на меню
- удалить этого слушателя, если пользователь выходит из меню
- попросить слушателя воспроизвести зацикленный видеоклип
- вызвать событие, которое остановит зацикливание клипа, если движение не было обнаружено в течение некоторого времени
- как только сработает триггер, остановите клип
Ключ в обнаружении, когда мышь перестает двигаться. Flash хорошо обнаруживает взаимодействие, но не обнаруживает отсутствие взаимодействия по очевидным причинам. Один из простых способов решить эту проблему - запустить таймер, который сработает, если прошло слишком много времени с момента последнего действия. Затем, когда срабатывает таймер, вы знаете, что действие остановлено!
Я думаю, что это ключ к решению вашей проблемы. Я надеюсь, что это кому-то поможет.
~ gmale