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

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

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

Регистрация: Mar 2010
Сообщений: 25
По умолчанию Проблема - при 2 кадрах в сцене root периодически равен null

Постараюсь написать подробнее.

Есть игра в которой два уровня. Первый уровень в 1 кадре основной сцены, второй уровень во 2 кадре. Когда персонаж доходит до выхода на первом уровне, он переходит на второй кадр (gotoAndStop(2)) - второй уровень.

В первом уровне все отлично, но как только переходи во второй уровень то в событии Event.ENTER_FRAME у какого либо класса участвующего в игре параметр (root as MovieClip) почему-то равено null через раз!

То есть грубо говоря если сделать trace(root as MovieClip) то во втором уровне в консоле видно:
[Object Engine]
null
[Object Engine]
null
[Object Engine]
null

Из-за этого валится куча ошибок во всех строках где участвует обращение к чему-либо через (root as MovieClip) во втором уровне.

Пришлось в 10 местах кода вставлять подобное:
Код AS3:
			if ((root as MovieClip) != null) 
			{
				if (this.hitTestObject((root as MovieClip).exit)) {
 
					(root as MovieClip).ChangeLevel(2);
 
				}
			}
Т.е. как видно по этому коду даже при проверке банального столкновения игрока (в классе игрока) с символом выхода с уровня (root as MovieClip) виден через раз и не получается сослаться на мувиклип выхода без ошибок.

Понятно что это не выход. Хочется понять почему "пляшет" root?

Язык AS3, все по классам.

Помогите пожалуйста, всю голову сломал уже.

Старый 27.03.2010, 17:14
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
В то время, как проигрывается первый кадр, второй не находится в дисплей листе и наоборот.
__________________
Hell is the possibility of sanity

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

Регистрация: Mar 2010
Сообщений: 25
А при чем здесь пропадение ссылки на root? ведь root есть в обоих кадрах, причем как я понимаю в каждом кадре он свой (в первом кадре на нем свои элементы расставлены, а во втором - свои).

Как решить проблему?

Старый 27.03.2010, 18:26
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Откуда root возьмется, когда дисплей объект не добавлен в дисплей лист?
__________________
Hell is the possibility of sanity

Старый 27.03.2010, 18:30
dedalx вне форума Посмотреть профиль Отправить личное сообщение для dedalx Найти все сообщения от dedalx
  № 5  
Ответить с цитированием
dedalx

Регистрация: Mar 2010
Сообщений: 25
Но ведь у меня в обоих кадрах stop. Ведь раз я вижу уровень и все прорисовано и все работает, то root уже создался?)

Подскажите как мне выйти из этой ситуации!

Добавлено через 2 минуты
Вообще код написанный у меня в классе ОСНОВНОГО документа, в конструкторе, выполняется каждый кадр заново или только один раз при запуске swf?

Как мне решить проблему? Если вместо кадров я буду подгружать мувики содержащие уровни - такой проблемы не будет?

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Возможно, у Вас существует два экземпляра того, у чего Вы проверяете root. Также возможно, что при переходе на второй кадр Вы забыли отписать первый экземпляр от Event.ENTER_FRAME. Т.е. когда нечто не находится в DisplayList, то и parent у него будет null.

Цитата:
Сообщение от dedalx Посмотреть сообщение
Вообще код написанный у меня в классе ОСНОВНОГО документа, в конструкторе, выполняется каждый кадр заново или только один раз при запуске swf?
Код DocumentClass'а выполняется один раз. Код в кадре - каждый раз при переходе playhead в этот кадр.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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