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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

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

Регистрация: Dec 2011
Адрес: Беларусь, Могилев
Сообщений: 16
Отправить сообщение для Quantum2010 с помощью ICQ
По умолчанию Удаление объектов.

Доброго времени суток, уважаемые форумчане!

Имеется кнопка "Play"! После нажатия на нее, все объекты на сцене (и тела Box2d) должны удалиться! Делаю это через логическую переменную "о", которой, после нажатия кнопки, присваиваю значение "0".

Так вот, все вроде работает, объекты удаляются, но в конце пишет

Код:
TypeError: Error #2007: Параметр child не должен быть равен нулю.
	at flash.display::DisplayObjectContainer/removeChild()
	at MethodInfo-836()
Смысл кода мне понятен, удаляю то, чего уже нет, но не знаю как решить проблему!

Вот код:
Код:
if (o == 0) {
		removeEventListener(Event.ENTER_FRAME, Update);
		addEventListener(Event.ENTER_FRAME, removeAllObject)
		}
		function removeAllObject():void {
			removeEventListener(Event.ENTER_FRAME, removeAllObject);
			trace("Я тут!");
			for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
				Game.gameLink.removeChild(bb.m_userData as Sprite);
                                m_world.DestroyBody(bb);
			}
		}
Добавлено через 26 минут
Ошибка в этой строке:
Код:
Game.gameLink.removeChild(bb.m_userData as Sprite);
Буду думать как решить!(
__________________
Лишь только смелым и решительным подвластны все вершины!


Последний раз редактировалось Quantum2010; 23.01.2012 в 19:18.
Старый 24.01.2012, 07:36
PikseL вне форума Посмотреть профиль Отправить личное сообщение для PikseL Посетить домашнюю страницу PikseL Найти все сообщения от PikseL
  № 2  
Ответить с цитированием
PikseL
 
Аватар для PikseL

Регистрация: Oct 2006
Адрес: Russia, Tyumen
Сообщений: 130
Отправить сообщение для PikseL с помощью ICQ Отправить сообщение для PikseL с помощью Skype™
Что-то типа:
Код AS3:
var sprite:Sprite = bb.m_userData as Sprite;
if (sprite && Game.gameLink.contains(sprite)) Game.gameLink.removeChild(sprite);
Или numChildren проверять.

Старый 29.01.2012, 15:47
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 3  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
не понятно зачем ты делаешь вотето:
Код AS3:
addEventListener(Event.ENTER_FRAME, removeAllObject)
		}
		function removeAllObject():void {
			removeEventListener(Event.ENTER_FRAME, removeAllObject);
попробуй вотетот цикл
Код AS3:
for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
				Game.gameLink.removeChild(bb.m_userData as Sprite);
                                m_world.DestroyBody(bb);
			}
разбить на два цикла
Код AS3:
for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
                                m_world.DestroyBody(bb);
			}
for (var i = Game.gameLink.numChildren - 1; i >= 0; i--){
      Game.gameLink.removeChildAt(i);
}

Старый 29.01.2012, 17:04
redefy вне форума Посмотреть профиль Отправить личное сообщение для redefy Посетить домашнюю страницу redefy Найти все сообщения от redefy
  № 4  
Ответить с цитированием
redefy
 
Аватар для redefy

Регистрация: Mar 2011
Сообщений: 58
Цитата:
Сообщение от anmelegov Посмотреть сообщение
разбить на два цикла
Код AS3:
for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
                                m_world.DestroyBody(bb);
			}
for (var i = Game.gameLink.numChildren - 1; i >= 0; i--){
      Game.gameLink.removeChildAt(i);
}
Ха. А смысл? Если в Game.gameLink есть еще что-то кроме скинов тел, например UI, BackGround и т.д...
Их-то нафига удалять? Правильно делается как раз как в первом цикле, перебор всех тел в Box2D мире, удаление самого тела и его скина, если он есть, путем получения ссылки на него через userData...

Старый 29.01.2012, 22:31
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 5  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
да но тебе дебагер пишет что у тебя есть физические тела без юзердаты и он не понимает че ты от него хочешь... сделай тогда проверку
Код AS1/AS2:
for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
				if(bb.m_userData != null) {Game.gameLink.removeChild(bb.m_userData as Sprite) };
                                m_world.DestroyBody(bb);
			}
Добавлено через 6 минут
как делаю я:
есть класс уровень, и есть спрайт уровня(в него засовывается фон уровня и текстуры всех тел которые есть в уровне, когда персонаж бежит по уровню этот спрайт двигается в противоположную сторону и получается что камера следит за ним)... вот так выглядит мой деструктор уровня:
Код AS1/AS2:
public function destruct():void{
	removeEventListener(Event.ENTER_FRAME, update);
	for (var bj:b2Joint = LevelVars.world.GetJointList(); bj; bj = bj.GetNext()) {
		LevelVars.world.DestroyJoint(bj);
	}
	for (var bb:b2Body = LevelVars.world.GetBodyList(); bb; bb = bb.GetNext()) {
		LevelVars.world.DestroyBody(bb);
	}
	for (var i:int = LevelVars.sprite.numChildren - 1; i >= 0; i--){ // этот спрайт является родительским для всех графических изображений элементов уровня и персонажей
		LevelVars.sprite.removeChildAt(i);
	}
	for (i = this.numChildren - 1; i >= 0; i--){
		this.removeChildAt(i);
	}
}
Добавлено через 7 минут
там еще где спрайты стираю должно быть битмэпдата.диспос() и затирание ссылок

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

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

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


 


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


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