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

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

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
По умолчанию Удаление конкретного объекта из массива таких же объектов

Всем привет. Решил тут пофанить, давненько игрушки не делал, а то все работа и работа. Так вот, застрял сейчас на том, что не могу сообразить, как организовать контроллер пуль. Он содержит в себе создание пули, помещение ее в массив, а затем удаление пули и отписки ее от всех событий - то есть, банальные действия.
Так в чем проблема: я не знаю, как потом выкинуть именно эту пулю из массива всех пуль.

Как делаю: создаю пулю, помещаю ее в массив методом push, а он возвращает длину массива, насколько я понял. Эту длину массива можно принять за индекс пули в массиве минус 1. Его-то я и загоняю в публичное свойство пули - id. Вроде все логично. Затем удаляю пулю и делаю splice у массива - пуля удаляется, но все сдвигается, чтобы не было пустых ячеек. То есть, id у других пуль уже другой должен быть.

Прошу помочь с правильным алгоритмом сиих действий, можно даже с примерами.

Ах ты, опечатку в названии сделал...
__________________
тут я


Последний раз редактировалось КорДум; 17.10.2010 в 14:29.
Старый 17.10.2010, 14:27
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 2  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
А нужен ли пулям id? И если нужен, то почему не использовать зависимость не от длины массива?
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Это мое решение, как видно из моего поста, оно некорректное. Если есть другая идея - прошу поделиться.
__________________
тут я

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Есть пуля, она создается и запускается. Настает момент когда ее нужно удалить - мы ее удаляем, при чем пуля удаляется сама или отсылает событие, что ее нужно удалить. Т.е. не нужны ни id, ни массив. Какая у них вообще по задумке была цель?
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Массив должен быть для столкновений с врагами. Планируется реализованное столкновение по сетке.
__________________
тут я

Старый 17.10.2010, 14:53
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 6  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
У пули есть метод апдейт. Вызывается из главного класса игры, чтобы не дергать ентерфрейм для каждого объекта (пробегаем по массиву объектов)

На методе апдейт, меняем положение пули, состояние. Если надо делаем статус пора уничтожать. Также есть проверка, если статус уничтожить, то шлем событие.

Старый 17.10.2010, 15:00
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 7  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
andrew911, это вообще другой подход. И как тут выкидывать пулю из массива?
Цитата:
чтобы не дергать ентерфрейм
что вы имете в виду? Удаление пули - это не проблегание по всему массиву. В моем случае - это сразу конкретная подстановка id и удаление сразу же именно этого, заранее известного, объекта. Вы говорите нечто общее. И это не то, что я спрашиваю.
__________________
тут я

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
А оператор строго равенства не подойдет?
Код AS3:
private function removeBullet(event:Event):void
{
	for (var i:int = 0; i < vectorBullents.length; i++) 
	{
		var bullet:Bullet = vectorBullents[i];
 
		if (bullet === event.target) 
		{
			bullet.destroy();//bullet = null
			bullet = null;
			clearVectorBullets();//очищает вектор от null объектов
			return;
		}
	}
}


Последний раз редактировалось Bgg; 17.10.2010 в 15:17.
Старый 17.10.2010, 15:19
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 9  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Bgg, так-так-так. А вот про замену на null и очистку от этих нулей я и не подумал. Да еще и вектором их организовать. Оттого скорость обработки будет выше и менее затратно для процессора. Спасибо.
Метод очистки можно даже запихать в класс-контроллер пуль, так будет логичнее.
__________________
тут я


Последний раз редактировалось КорДум; 17.10.2010 в 15:21.
Старый 17.10.2010, 15:22
kutuzov вне форума Посмотреть профиль Отправить личное сообщение для kutuzov Найти все сообщения от kutuzov
  № 10  
Ответить с цитированием
kutuzov
 
Аватар для kutuzov

Регистрация: Jul 2005
Сообщений: 135
Код AS3:
arr.splice(arr.indexOf(bullet), 1)
__________________
хоумпага

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

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

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


 


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


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