Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Останавливается проигрывание gotoAndPlay( ) (http://www.flasher.ru/forum/showthread.php?t=205850)

dendead 25.12.2013 23:27

Останавливается проигрывание gotoAndPlay( )
 
Доброго времени суток. Никак не могу понять один свой косяк.

Есть две функции. Одна из них регистрирует событие Event.ENTER_FRAME в мувклипе clip:

Код AS3:

        public function eatingAnimation( ):void {
                        clip.addEventListener(Event.ENTER_FRAME, animation);
        }

Другая проигрывает анимацию до конца кадров мувклипа, после чего выполняет какие-то действия и удаляет регистрацию:

Код AS3:

                public function animation(e:Event):void {        
                        clip.gotoAndPlay("animation");
 
                        if (clip.currentFrame == clip.totalFrames) {
                              trace("ВСЕ КАДРЫ ПРОИГРАНЫ");
                              // КАКИЕ-ТО ДЕЙСТВИЯ
                              mMouth.removeEventListener(Event.ENTER_FRAME, mouthAnimEating);        // удалить регистрацию приёмника
                        }
                }

А проблема в том, что после регистрации события, timeline переходит на следующий кадр после "animation" и останавливается. При этом, если я использую:
Код AS3:

clip.play( );

вместо:
Код AS3:

clip.gotoAndPlay("animation");

анимация проигрывается но, естественно, с самого начала мувклипа. Именно при переходе по кадрам начиная от метки "animation" воспроизведение останавливается, также и при:
Код AS3:

clip.gotoAndPlay(номер_кадра);


shmaser 25.12.2013 23:33

gotoAndPlay вызывается каждый кадр постоянно заново с метки "animation", т.к. находится в слушателе события Event.ENTER_FRAME.

dendead 25.12.2013 23:36

Точно. А можно ли как-то заставить flash проиграть полностью все кадры клипа, прежде чем совершать какие-то действия, без использования Event.ENTER_FRAME?

shmaser 25.12.2013 23:44

Код AS3:

clip.gotoAndPlay("animation");

переместите в функцию eatingAnimation

dendead 25.12.2013 23:53

Тогда на момент проверки:
Код AS3:

if (clip.currentFrame == clip.totalFrames)

clip.currentFrame и clip.totalFrames всегда неравны и flash никогда не доберётся до // КАКИЕ-ТО ДЕЙСТВИЯ.

Akopalipsis 25.12.2013 23:57

А если менять по EnterFrame номера кадров?
Код AS3:

//где то в коде
private var numFrame:int=0;
//в обработчике EnterFrame
clip.gotoAndPlay(numFrame);
numFrame++;


shmaser 26.12.2013 00:02

Разве так не работает?
Код AS3:

public function eatingAnimation( ):void {
                clip.gotoAndPlay("animation");
                        clip.addEventListener(Event.ENTER_FRAME, animation);
        }

Код AS3:

public function animation(e:Event):void {        
                        if (clip.currentFrame == clip.totalFrames) {
                              trace("ВСЕ КАДРЫ ПРОИГРАНЫ");
                              // КАКИЕ-ТО ДЕЙСТВИЯ
                              clip.removeEventListener(Event.ENTER_FRAME, animation);
                        }
                }


dendead 26.12.2013 00:12

shmaser, при таком подходе gotoAndPlay не работает.

Добавлено через 1 минуту
Я оставил play( ) и передвинул некоторые кадры на timeline. Этим и решил проблему. Спасибо, shmaser за первоначальную наводку.

Добавлено через 11 минут
Хотя всё же play( ) всё равно портит общую картину... Буду думать.

Добавлено через 21 минуту
Вот теперь точно получилось с помощью примера Akopalipsis.
Большое спасибо всем. Не первый раз выручаете.

caseyryan 26.12.2013 10:19

Цитата:

shmaser, при таком подходе gotoAndPlay не работает.
Не может быть. Значит у вас где-то еще есть код, создающий проблемы

dendead 26.12.2013 17:19

Буду проверять.


Часовой пояс GMT +4, время: 15:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.