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

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

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

Регистрация: Jun 2010
Сообщений: 120
По умолчанию событие ENTER_FRAME

Доброго времени суток.
Никак не могу понять, как работает событие Event.ENTER_FRAME. Читал мануал, но это не помогло в решении проблемы. Вот код:

Код AS3:
private function playButtonClickHandler(event:MouseEvent):void
{
	playButton.removeEventListener(MouseEvent.CLICK, playButtonClickHandler);
	gotoAndStop("Intro");
	addEventListener(Event.ENTER_FRAME, everyFrame, false, 0, true);
}
 
 
private function everyFrame(event:Event):void
{
	removeEventListener(Event.ENTER_FRAME, everyFrame);
	if (storm.currentFrame == storm.totalFrames)
	{
		storm.stop();
		gotoAndStop("Game");
	}
}
Имеется 3 кадра во Flash IDE, каждый из которых имеет собственные имена. После загрузки прелоадера появляется кнопка Play, по нажатию на нею мы переходим во второй кадр Intro, который содержит мувиклип под именем storm, внутри которого анимация. Так вот мне хотелось бы, после того, как проигралась анимация в мувиклипе, перейти обратно на главную временную шкалу в третий кадр Game. А проблема заключается в том, что у меня этот мувиклип при запуске бесконечно воспроизводится. Хотя не знаю почему, но при замене removeEventListener(Event.ENTER_FRAME, everyFrame) на storm.removeEventListener(Event.ENTER_FRAME, everyFrame) , но при этом оставляя это addEventListener(Event.ENTER_FRAME, everyFrame, false, 0, true) без изменений переход осуществляется в третий кадр, но выходит в окне Otput такое сообщение "TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at Preloader/everyFrame()"


Последний раз редактировалось goldlider; 04.04.2011 в 22:06.
Старый 04.04.2011, 22:09
Stargazer вне форума Посмотреть профиль Отправить личное сообщение для Stargazer Найти все сообщения от Stargazer
  № 2  
Ответить с цитированием
Stargazer

Регистрация: Nov 2008
Сообщений: 528
Просто внимательно прочтите ваш код. У вас ошибка в логике. Первое, что делает everyFrame - это удаляет слушатель с ENTER_FRAME независимо от того, находитесь вы на последнем кадре или нет.

Старый 04.04.2011, 22:25
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 3  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
Stargazer, ну вот убрал я это removeEventListener(Event.ENTER_FRAME, everyFrame), но то сообщение осталось.

Старый 04.04.2011, 22:35
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Сделайте в начале everyFrame:
Код AS3:
trace(storm);
Если там null, значит мувиклипа с указанным именем нет на сцене в текущем кадре.

30000

Старый 04.04.2011, 22:37
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 5  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
AVM найти не может storm aka MovieClip. Помогите ей его найти.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 05.04.2011, 09:12
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 6  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
etc, поставил перед everyFrame trace(storm), в output вывелось 66 раз [object MovieClip], т.е. внутри мувиклипа действительно 66 кадров. А вот после того, как мувик проигрался при переходе из внутреннего таймлайна мувиклипа в главный выходит тоже самое сообщение.

dimarik, мувиклип у меня нах-ся во 2-ом кадре. В 3-ем кадре его нету, как я и задумал.

А вообще мне не понятно, когда я пишу просто
Код AS3:
addEventListener(Event.ENTER_FRAME, everyFrame, false, 0, true)
stage слушает данное событие так ведь ?
А когда
Код AS3:
storm.addEventListener(Event.ENTER_FRAME, everyFrame, false, 0, true)
мувиклип слушает ? Так почему, если я пишу просто addEventListener у меня мувиклип запускается, хотя кадры находятся у него внутри. И разницы между этими записями не происходят. Хоть я напишу первый вариант, у меня переход в кадр с мувиклипом осуществляется, хоть я напишу второй вариант, происходит тоже самое.


Последний раз редактировалось goldlider; 05.04.2011 в 09:25.
Старый 05.04.2011, 09:23
MAPUTO вне форума Посмотреть профиль Отправить личное сообщение для MAPUTO Найти все сообщения от MAPUTO
  № 7  
Ответить с цитированием
MAPUTO
 
Аватар для MAPUTO

Регистрация: Mar 2011
Сообщений: 38
Создай объект-пустышку к нему и примени слушатель (obj.addEventListener...), либо применяй его к объекту storm (storm.addEventListener...) и удаляй в 66-м кадре (storm.removeEventListener...).


Последний раз редактировалось MAPUTO; 05.04.2011 в 09:38.
Старый 05.04.2011, 09:33
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 8  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
MAPUTO, у меня в кадрах ничего не написано, все написано в отдельном as-файле, который связан с Flash IDE. Вас не поймешь, одни говорят убрать removeEventListener в ф-ии everyFrame, другие говорят поставить.
В обоих случаях ошибка возникает.

Старый 05.04.2011, 09:41
MAPUTO вне форума Посмотреть профиль Отправить личное сообщение для MAPUTO Найти все сообщения от MAPUTO
  № 9  
Ответить с цитированием
MAPUTO
 
Аватар для MAPUTO

Регистрация: Mar 2011
Сообщений: 38
removeEventListener надо ставить не в самой функции а так чтобы она срабатывала после проверки события достижения последнего кадра мувика.
Код AS3:
private function everyFrame(event:Event):void
{
	if (storm.currentFrame == storm.totalFrames)
	{
		removeEventListener(Event.ENTER_FRAME, everyFrame);
		storm.stop();
		gotoAndStop("Game");
	}
}

Старый 05.04.2011, 13:08
Stargazer вне форума Посмотреть профиль Отправить личное сообщение для Stargazer Найти все сообщения от Stargazer
  № 10  
Ответить с цитированием
Stargazer

Регистрация: Nov 2008
Сообщений: 528
Вот, MAPUTO написал то, что я думал, что вы и сами поймёте. Ошибка, видимо, возникает тогда, когда вы переходите на 3-й кадр не убирая слушателя. На 3-м кадре у вас, видимо, storm-а нет (что логично, зачем держать интро на кадре, где должна быть "Game"), поэтому выражения storm.currentFrame и storm.totalFrame приводят к ошибке (неоткуда получать эти свойства, пусто).

Добавлено через 8 минут
Цитата:
Сообщение от goldlider Посмотреть сообщение
А вообще мне не понятно, когда я пишу просто
Код AS3:
addEventListener(Event.ENTER_FRAME, everyFrame, false, 0, true)
stage слушает данное событие так ведь ?
А когда
Код AS3:
storm.addEventListener(Event.ENTER_FRAME, everyFrame, false, 0, true)
мувиклип слушает ? Так почему, если я пишу просто addEventListener у меня мувиклип запускается, хотя кадры находятся у него внутри. И разницы между этими записями не происходят. Хоть я напишу первый вариант, у меня переход в кадр с мувиклипом осуществляется, хоть я напишу второй вариант, происходит тоже самое.
Непонятно, чего вы непонимаете. Вы не с as1/2 перешли? Неважно, кто слушает. Важно, что функция, которая слушает, находится в Preloader. Поэтому у неё область видимости Preloader-овская.


Последний раз редактировалось Stargazer; 05.04.2011 в 13:11.
Создать новую тему Ответ Часовой пояс GMT +4, время: 13:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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