![]() |
Удаление конкретного объекта из массива таких же объектов
Всем привет. Решил тут пофанить, давненько игрушки не делал, а то все работа и работа. Так вот, застрял сейчас на том, что не могу сообразить, как организовать контроллер пуль. Он содержит в себе создание пули, помещение ее в массив, а затем удаление пули и отписки ее от всех событий - то есть, банальные действия.
Так в чем проблема: я не знаю, как потом выкинуть именно эту пулю из массива всех пуль. Как делаю: создаю пулю, помещаю ее в массив методом push, а он возвращает длину массива, насколько я понял. Эту длину массива можно принять за индекс пули в массиве минус 1. Его-то я и загоняю в публичное свойство пули - id. Вроде все логично. Затем удаляю пулю и делаю splice у массива - пуля удаляется, но все сдвигается, чтобы не было пустых ячеек. То есть, id у других пуль уже другой должен быть. Прошу помочь с правильным алгоритмом сиих действий, можно даже с примерами. Ах ты, опечатку в названии сделал... |
А нужен ли пулям id? И если нужен, то почему не использовать зависимость не от длины массива?
|
Это мое решение, как видно из моего поста, оно некорректное. Если есть другая идея - прошу поделиться.
|
Есть пуля, она создается и запускается. Настает момент когда ее нужно удалить - мы ее удаляем, при чем пуля удаляется сама или отсылает событие, что ее нужно удалить. Т.е. не нужны ни id, ни массив. Какая у них вообще по задумке была цель?
|
Массив должен быть для столкновений с врагами. Планируется реализованное столкновение по сетке.
|
У пули есть метод апдейт. Вызывается из главного класса игры, чтобы не дергать ентерфрейм для каждого объекта (пробегаем по массиву объектов)
На методе апдейт, меняем положение пули, состояние. Если надо делаем статус пора уничтожать. Также есть проверка, если статус уничтожить, то шлем событие. |
andrew911, это вообще другой подход. И как тут выкидывать пулю из массива?
Цитата:
|
А оператор строго равенства не подойдет?
Код AS3:
|
Bgg, так-так-так. А вот про замену на null и очистку от этих нулей я и не подумал. Да еще и вектором их организовать. Оттого скорость обработки будет выше и менее затратно для процессора. Спасибо.
Метод очистки можно даже запихать в класс-контроллер пуль, так будет логичнее. |
Код AS3:
|
| Часовой пояс GMT +4, время: 06:26. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.