![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2007
Сообщений: 545
|
У меня есть гарантия, что я не пропущу элемент и не обращусь к несуществующему элементу массива при обходе. Пули удаляются в порядке обхода.
|
|
|||||
|
тоже писал мини-игру шутер. создавал класс "пуля". в главном классе создал массив. при щелчке мыши создавал новый объект пулю и клал в конец массива. далее отслеживал перемещение каждой пули и если она уходила за пределы массива, то удалял ее полностью (имя_Массива.splice(номер элемента, число элементов для удаления))
public var bullets:Array = new Array(); /* добавляем пули при клике .............. */ addEventsListener(Event.ENTER_FRAME, func); /* ....... */ private function func(e:Event):void { moveBullet() //при обновлении экрана двигаем пулю } public function moveBullet():void { var i:Number; for ( i= bullets.lenght-1; i >=0; i--) //перебираем каждую пулю с конца массива { /*двигаем пулю куда надо*/ if (/*пуля за пределами экрана */) { removeChild(bullets[i]); bullets.splice(i,1); i++; //так как элемент удален, возвращаемся на эту же позицию } } } простите за неточности и ошибки, писал из головы и для наглядности) |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 29
|
Спасибо всем , помогло.
Я действительно забывал обновить numOfitems после удаления из массива. + Подумаю на счет перебора с конца. |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 545
|
Tasmanec
Не нужно делать Вы удаляете пулю X, следующая в цикле будет Х-1. Если же делать инкремент, то вы еще раз подвигаете и проверите пулю которая была Х+1, а стала после удаления Х. |
|
|||||
|
andrew911
ну да не взял во внимание, что массив с конца пересчитывается. В своем исходнике все норм, без инкремента. вот что значит по памяти писать) |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|