Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема - при 2 кадрах в сцене root периодически равен null (http://www.flasher.ru/forum/showthread.php?t=137994)

dedalx 27.03.2010 16:31

Проблема - при 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, все по классам.

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

wvxvw 27.03.2010 17:14

В то время, как проигрывается первый кадр, второй не находится в дисплей листе и наоборот.

dedalx 27.03.2010 17:23

А при чем здесь пропадение ссылки на root? ведь root есть в обоих кадрах, причем как я понимаю в каждом кадре он свой (в первом кадре на нем свои элементы расставлены, а во втором - свои).

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

wvxvw 27.03.2010 18:26

Откуда root возьмется, когда дисплей объект не добавлен в дисплей лист?

dedalx 27.03.2010 18:30

Но ведь у меня в обоих кадрах stop. Ведь раз я вижу уровень и все прорисовано и все работает, то root уже создался?)

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

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

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

dimarik 29.03.2010 00:54

Возможно, у Вас существует два экземпляра того, у чего Вы проверяете root. Также возможно, что при переходе на второй кадр Вы забыли отписать первый экземпляр от Event.ENTER_FRAME. Т.е. когда нечто не находится в DisplayList, то и parent у него будет null.

Цитата:

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

Код DocumentClass'а выполняется один раз. Код в кадре - каждый раз при переходе playhead в этот кадр.


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

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