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

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

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

Регистрация: Nov 2011
Сообщений: 11
По умолчанию Многокадровый MovieClip и FlashDevelop

Здравствуйте! Я пытаюсь в своей игре реализовать поддержку загрузки игровых уровней из одного MovieClip'a, причем уровни хранятся в его кадрах: 1 кадр - 1 уровень и т.д.

Возникла странная проблема. Вот код загрузки:

Код AS3:
private function load(e:Event = null):void {
removeEventListener(Event.ENTER_FRAME, load);
 
scene = new MovieClip();
addChild(scene);
 
var i:int = 0;
while (i < numChildren) {
var obj:DisplayObject = getChildAt(i);
 
//...
 
if (obj is cTestObj) {
var test:mcTestObj = new mcTestObj();   // Мой класс, наследующий cTestObj
//... Код загрузки этого объекта, он не так важен
} else
 
// И так далее, аналогично				
i++;
}
}
Эта функция стоит на событии Event.ENTER_FRAME. Когда мне надо загрузить уровень, я делаю gotoAndStop(<номер уровня-кадра>), а затем вешаю этот листенер.

Если мне попадается объект типа cTestObj, тогда я создаю свой новый объект с нужными мне свойствами, а потом добавляю его в отдельный объект-сцену.

Так вот. Путем многочисленного дебажинга я обнаружил, что иногда obj грузится не так, как он выглядит во Flash IDE.

Т.е. например, у меня в MovieClip'е с уровнями три кадра, в каждом свой уровень, то есть несколько объектов, по-разному расположенных. Тот уровень-кадр, который загружается первым, всегда корректно грузится. А если после него попытаться грузить другие уровни, то в них вместо их объектов могут попадаться объекты из первого уровня, то есть расположенные так же, как в первом.

Никак не пойму, в чем проблема?

Старый 11.11.2011, 17:47
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 2  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
Инстансы с кадра, если у них не меняется класс на следующем кадре, не будут создаваться заново.
Сделай кадр, на котором вообще нет ничего. Сначала прыгни туда, а потом на нужный кард.

Старый 11.11.2011, 17:49
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Очищайте контейнер
__________________
Марк Tween

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

Регистрация: Nov 2011
Сообщений: 11
Спасибо за ответы! in4core, старый контейнер каждый раз при новой загрузке отдаю на растерзание сборщику мусора :-)

zuxul, спасибо, проверю сразу же, как смогу) Странно. В моем случае все объекты на уровне - одного класса, но при этом какие-то из них не меняют положение, а какие-то меняют...

Старый 11.11.2011, 21:12
Deirel вне форума Посмотреть профиль Отправить личное сообщение для Deirel Найти все сообщения от Deirel
  № 5  
Ответить с цитированием
Deirel

Регистрация: Nov 2011
Сообщений: 11
Спасибо! zuxul, Вы мне очень помогли!

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

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Возьмите за правило очищать контейнер каждый раз перед заполнением:

Код AS3:
while (container.numChildren)
    container.removeChildAt(0);

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

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

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


 


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


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