Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удаление конкретного объекта из массива таких же объектов (http://www.flasher.ru/forum/showthread.php?t=145710)

КорДум 17.10.2010 14:24

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

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

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

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

TanaTiX 17.10.2010 14:27

А нужен ли пулям id? И если нужен, то почему не использовать зависимость не от длины массива?

КорДум 17.10.2010 14:28

Это мое решение, как видно из моего поста, оно некорректное. Если есть другая идея - прошу поделиться.

TanaTiX 17.10.2010 14:37

Есть пуля, она создается и запускается. Настает момент когда ее нужно удалить - мы ее удаляем, при чем пуля удаляется сама или отсылает событие, что ее нужно удалить. Т.е. не нужны ни id, ни массив. Какая у них вообще по задумке была цель?

КорДум 17.10.2010 14:45

Массив должен быть для столкновений с врагами. Планируется реализованное столкновение по сетке.

andrew911 17.10.2010 14:53

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

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

КорДум 17.10.2010 15:00

andrew911, это вообще другой подход. И как тут выкидывать пулю из массива?
Цитата:

чтобы не дергать ентерфрейм
что вы имете в виду? Удаление пули - это не проблегание по всему массиву. В моем случае - это сразу конкретная подстановка id и удаление сразу же именно этого, заранее известного, объекта. Вы говорите нечто общее. И это не то, что я спрашиваю.

Bgg 17.10.2010 15:13

А оператор строго равенства не подойдет?
Код 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;
                }
        }
}


КорДум 17.10.2010 15:19

Bgg, так-так-так. А вот про замену на null и очистку от этих нулей я и не подумал. Да еще и вектором их организовать. Оттого скорость обработки будет выше и менее затратно для процессора. Спасибо.
Метод очистки можно даже запихать в класс-контроллер пуль, так будет логичнее.

kutuzov 17.10.2010 15:22

Код AS3:

arr.splice(arr.indexOf(bullet), 1)



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

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