![]() |
|
||||||||||
|
|
|
|||||
|
Доброго времени суток, уважаемые форумчане!
Имеется кнопка "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);
}
}
Ошибка в этой строке: Буду думать как решить!(
__________________
Лишь только смелым и решительным подвластны все вершины! Последний раз редактировалось Quantum2010; 23.01.2012 в 19:18. |
|
|||||
|
Что-то типа:
Или numChildren проверять. |
|
|||||
|
Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
не понятно зачем ты делаешь вотето:
addEventListener(Event.ENTER_FRAME, removeAllObject) } function removeAllObject():void { removeEventListener(Event.ENTER_FRAME, removeAllObject); 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); } |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 58
|
Цитата:
Их-то нафига удалять? Правильно делается как раз как в первом цикле, перебор всех тел в Box2D мире, удаление самого тела и его скина, если он есть, путем получения ссылки на него через userData... |
|
|||||
|
Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
да но тебе дебагер пишет что у тебя есть физические тела без юзердаты и он не понимает че ты от него хочешь... сделай тогда проверку
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); } как делаю я: есть класс уровень, и есть спрайт уровня(в него засовывается фон уровня и текстуры всех тел которые есть в уровне, когда персонаж бежит по уровню этот спрайт двигается в противоположную сторону и получается что камера следит за ним)... вот так выглядит мой деструктор уровня: 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); } } там еще где спрайты стираю должно быть битмэпдата.диспос() и затирание ссылок |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|