Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.12.2013, 23:27
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 1  
Ответить с цитированием
dendead

Регистрация: Aug 2013
Сообщений: 73
По умолчанию Останавливается проигрывание 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(номер_кадра);

Старый 25.12.2013, 23:33
shmaser вне форума Посмотреть профиль Отправить личное сообщение для shmaser Найти все сообщения от shmaser
  № 2  
Ответить с цитированием
shmaser
 
Аватар для shmaser

Регистрация: Aug 2010
Сообщений: 22
gotoAndPlay вызывается каждый кадр постоянно заново с метки "animation", т.к. находится в слушателе события Event.ENTER_FRAME.

Старый 25.12.2013, 23:36
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 3  
Ответить с цитированием
dendead

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

Старый 25.12.2013, 23:44
shmaser вне форума Посмотреть профиль Отправить личное сообщение для shmaser Найти все сообщения от shmaser
  № 4  
Ответить с цитированием
shmaser
 
Аватар для shmaser

Регистрация: Aug 2010
Сообщений: 22
Код AS3:
clip.gotoAndPlay("animation");
переместите в функцию eatingAnimation

Старый 25.12.2013, 23:53
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 5  
Ответить с цитированием
dendead

Регистрация: Aug 2013
Сообщений: 73
Тогда на момент проверки:
Код AS3:
if (clip.currentFrame == clip.totalFrames)
clip.currentFrame и clip.totalFrames всегда неравны и flash никогда не доберётся до // КАКИЕ-ТО ДЕЙСТВИЯ.

Старый 25.12.2013, 23:57
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 6  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
А если менять по EnterFrame номера кадров?
Код AS3:
//где то в коде
private var numFrame:int=0;
//в обработчике EnterFrame
clip.gotoAndPlay(numFrame);
numFrame++;

Старый 26.12.2013, 00:02
shmaser вне форума Посмотреть профиль Отправить личное сообщение для shmaser Найти все сообщения от shmaser
  № 7  
Ответить с цитированием
shmaser
 
Аватар для shmaser

Регистрация: Aug 2010
Сообщений: 22
Разве так не работает?
Код 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);
			}
		}

Старый 26.12.2013, 00:12
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 8  
Ответить с цитированием
dendead

Регистрация: Aug 2013
Сообщений: 73
shmaser, при таком подходе gotoAndPlay не работает.

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

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

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


Последний раз редактировалось dendead; 26.12.2013 в 00:34.
Старый 26.12.2013, 10:19
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
shmaser, при таком подходе gotoAndPlay не работает.
Не может быть. Значит у вас где-то еще есть код, создающий проблемы

Старый 26.12.2013, 17:19
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 10  
Ответить с цитированием
dendead

Регистрация: Aug 2013
Сообщений: 73
Буду проверять.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:08.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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