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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.08.2011, 00:10
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 11  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

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

Старый 22.08.2011, 01:29
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 12  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
У меня есть гарантия, что я не пропущу элемент и не обращусь к несуществующему элементу массива при обходе. Пули удаляются в порядке обхода.

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

Регистрация: Aug 2011
Сообщений: 35
Отправить сообщение для Tasmanec с помощью Skype™
тоже писал мини-игру шутер. создавал класс "пуля". в главном классе создал массив. при щелчке мыши создавал новый объект пулю и клал в конец массива. далее отслеживал перемещение каждой пули и если она уходила за пределы массива, то удалял ее полностью (имя_Массива.splice(номер элемента, число элементов для удаления))




Код AS3:
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++;                                //так как элемент удален, возвращаемся на эту же позицию
          }
 
     }
}
Добавлено через 19 минут
простите за неточности и ошибки, писал из головы и для наглядности)

Старый 22.08.2011, 02:31
reQuiem вне форума Посмотреть профиль Отправить личное сообщение для reQuiem Найти все сообщения от reQuiem
  № 14  
Ответить с цитированием
reQuiem

Регистрация: Aug 2011
Сообщений: 29
Спасибо всем , помогло.
Я действительно забывал обновить numOfitems после удаления из массива.
+ Подумаю на счет перебора с конца.

Старый 22.08.2011, 04:02
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 15  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
Tasmanec
Не нужно делать
Код AS3:
i++;
Вы удаляете пулю X, следующая в цикле будет Х-1.
Если же делать инкремент, то вы еще раз подвигаете и проверите пулю которая была Х+1, а стала после удаления Х.

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

Регистрация: Aug 2011
Сообщений: 35
Отправить сообщение для Tasmanec с помощью Skype™
andrew911

ну да не взял во внимание, что массив с конца пересчитывается.
В своем исходнике все норм, без инкремента. вот что значит по памяти писать)

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

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

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


 


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


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