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

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

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

Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
По умолчанию полностью не удаляется спрайт

В игре героя атакует враг, когда у героя жизней <= 0, нужно его убить и удалить..
Код AS3:
private function onDieComplete(e:Event):void
		{	
			this.parent.removeChild(this,true);
		}
но в чем, суть, трейс показывает ,что количество объектов на сцене уменьшилось, но враг продолжает бить какого то героя, хотя его на сцене нет, и в чем суть в режиме отладки показывается, что продолжает уменьшаться количество жизней и объект еще существует

Старый 10.10.2013, 14:45
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 2  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
То что Вы удалили объект со сцены не означает что Вы удалили объект вообще. Он по прежнему существует, за исключением того что не отображается на сцене.
__________________
return this...

Старый 10.10.2013, 14:48
Vansimar вне форума Посмотреть профиль Отправить личное сообщение для Vansimar Найти все сообщения от Vansimar
  № 3  
Ответить с цитированием
Vansimar
 
Аватар для Vansimar

Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
А что можно сделатЬ?

Старый 10.10.2013, 14:50
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 4  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Нужно смотреть как у Вас организованна логика, как создается объект, где прописывается ссылка на него и соответсвено с removeChild удалять объект от туда где он сохранён.
__________________
return this...

Старый 10.10.2013, 14:54
Vansimar вне форума Посмотреть профиль Отправить личное сообщение для Vansimar Найти все сообщения от Vansimar
  № 5  
Ответить с цитированием
Vansimar
 
Аватар для Vansimar

Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
ну я его так добавляю
Код AS3:
hero = new Hero();
			hero.x = 50;
			hero.y = 397;
			InGame.enemies.push(hero);
еще пушу его в массив всех Entity чтоб можно было получать к нему доступ из класса врага

Добавлено через 15 минут
Я поставил утилитку для наблюдения за ресурсами памяти, и вот при удалении память освобождается, но враг все равно атакует

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Это абсолютно ожидаемое поведение. После удаления спрайта удалите его из этого массива
InGame.enemies
__________________
return this...

Старый 10.10.2013, 16:39
Vansimar вне форума Посмотреть профиль Отправить личное сообщение для Vansimar Найти все сообщения от Vansimar
  № 7  
Ответить с цитированием
Vansimar
 
Аватар для Vansimar

Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
А почему так? это ж вроде как одна ссылка на один экземпляр

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Потому что выполнив addChild или addChildAt вы не передаете объект целиком. Вы всего лишь говорите плееру что этот объект следует отображать.

Добавлено через 16 минут
соответственно когда Вы используете removeChild / removeChildAt вы не удаляете объект, а просто сообщаете что нужно удалить этот объект с списка отображаемых плеером объектов.
__________________
return this...

Старый 11.10.2013, 12:26
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 9  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
Цитата:
Сообщение от Vansimar Посмотреть сообщение
В игре героя атакует враг, когда у героя жизней <= 0, нужно его убить и удалить..
Код AS3:
private function onDieComplete(e:Event):void
		{	
			this.parent.removeChild(this,true);
		}
но в чем, суть, трейс показывает ,что количество объектов на сцене уменьшилось, но враг продолжает бить какого то героя, хотя его на сцене нет, и в чем суть в режиме отладки показывается, что продолжает уменьшаться количество жизней и объект еще существует
А я у каждого объекта создаю переменную life, если объект умирает, то значение становится life false и соответственно перед битьём проверяется значение life.

Старый 11.10.2013, 14:13
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
А я у каждого объекта создаю переменную life, если объект умирает, то значение становится life false и соответственно перед битьём проверяется значение life.
Это тоже не правильно. Ну нет у него жизней, в человеческом понимании, но для программы то он живее всех живых.
Цитата:
А почему так? это ж вроде как одна ссылка на один экземпляр
Экземпляр один, а ссылки разные.
Самый разумный способ - это в классе Hero сделать метод, в котором все, что он насоздавал внутри, уничтожается, и зануляются все ссылки на внешние объекты (если таковые имеются)
И дальше уничтожение свелось бы к такой логике:
Код AS3:
if (hero != null) {
    hero.dispose();
    var index:int = someArray.indexOf(hero); // и сносим из массива, раз уж он там
    if (index > -1) someArray.splice(index, 1); 
    hero = null;
}

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

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

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


 


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


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