Просмотр полной версии : полностью не удаляется спрайт
Vansimar
10.10.2013, 14:41
В игре героя атакует враг, когда у героя жизней <= 0, нужно его убить и удалить..
private function onDieComplete(e:Event):void
{
this.parent.removeChild(this,true);
}
но в чем, суть, трейс показывает ,что количество объектов на сцене уменьшилось, но враг продолжает бить какого то героя, хотя его на сцене нет, и в чем суть в режиме отладки показывается, что продолжает уменьшаться количество жизней и объект еще существует
AlexCooper
10.10.2013, 14:45
То что Вы удалили объект со сцены не означает что Вы удалили объект вообще. Он по прежнему существует, за исключением того что не отображается на сцене.
Vansimar
10.10.2013, 14:48
А что можно сделатЬ?
AlexCooper
10.10.2013, 14:50
Нужно смотреть как у Вас организованна логика, как создается объект, где прописывается ссылка на него и соответсвено с removeChild удалять объект от туда где он сохранён.
Vansimar
10.10.2013, 14:54
ну я его так добавляю
hero = new Hero();
hero.x = 50;
hero.y = 397;
InGame.enemies.push(hero);
еще пушу его в массив всех Entity чтоб можно было получать к нему доступ из класса врага
Добавлено через 15 минут
Я поставил утилитку для наблюдения за ресурсами памяти, и вот при удалении память освобождается, но враг все равно атакует
AlexCooper
10.10.2013, 16:25
Это абсолютно ожидаемое поведение. После удаления спрайта удалите его из этого массива
InGame.enemies
Vansimar
10.10.2013, 16:39
А почему так? это ж вроде как одна ссылка на один экземпляр
AlexCooper
10.10.2013, 17:01
Потому что выполнив addChild или addChildAt вы не передаете объект целиком. Вы всего лишь говорите плееру что этот объект следует отображать.
Добавлено через 16 минут
соответственно когда Вы используете removeChild / removeChildAt вы не удаляете объект, а просто сообщаете что нужно удалить этот объект с списка отображаемых плеером объектов.
В игре героя атакует враг, когда у героя жизней <= 0, нужно его убить и удалить..
private function onDieComplete(e:Event):void
{
this.parent.removeChild(this,true);
}
но в чем, суть, трейс показывает ,что количество объектов на сцене уменьшилось, но враг продолжает бить какого то героя, хотя его на сцене нет, и в чем суть в режиме отладки показывается, что продолжает уменьшаться количество жизней и объект еще существует
А я у каждого объекта создаю переменную life, если объект умирает, то значение становится life false и соответственно перед битьём проверяется значение life.
caseyryan
11.10.2013, 14:13
А я у каждого объекта создаю переменную life, если объект умирает, то значение становится life false и соответственно перед битьём проверяется значение life.
Это тоже не правильно. Ну нет у него жизней, в человеческом понимании, но для программы то он живее всех живых.
А почему так? это ж вроде как одна ссылка на один экземпляр
Экземпляр один, а ссылки разные.
Самый разумный способ - это в классе Hero сделать метод, в котором все, что он насоздавал внутри, уничтожается, и зануляются все ссылки на внешние объекты (если таковые имеются)
И дальше уничтожение свелось бы к такой логике:
if (hero != null) {
hero.dispose();
var index:int = someArray.indexOf(hero); // и сносим из массива, раз уж он там
if (index > -1) someArray.splice(index, 1);
hero = null;
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.