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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.10.2010, 15:12
Antony вне форума Посмотреть профиль Отправить личное сообщение для Antony Найти все сообщения от Antony
  № 1  
Ответить с цитированием
Antony

Регистрация: Oct 2010
Сообщений: 14
По умолчанию Обработка нескольких элементов с одинаковым именем

В игре делаю пушку которая стреляет пулями. При попадании пули в стену, пуля должна взрываться. пишу следующий код:
Пули выстреливают. Если выстрелить только одну пулю, она врежется в стену и взорвется, но если выстрелить сразу много пуль, то они пролетят сквозь стену и только последняя из них врежется в стену и взорвется.
Что тут можно сделать?

Код AS3:
function shoot():void { //Выстрел из пушки
 
    trace("Pif->");
    bulletclip = new BulletClip(); //Новая пуля
    stage.addChild(bulletclip); //Добавляем на сцену
    bulletclip.x = cannon.x;
    bulletclip.y = cannon.y-38;
 
 
    TweenLite.to(bulletclip, 2, {y:-100}); //Передвигаем пулю с помощью TweenLite
 
    stage.addEventListener(Event.ENTER_FRAME,bullet_border); //Проверка пули на столкновение со стеной
 
 
    function bullet_border(e:Event) {
 
        if(bulletclip.y <= 0) {
            stage.removeEventListener(Event.ENTER_FRAME,bullet_border);
            bulletstop(); //Функция останавливает и взрывает пулю
        }
 
    }
 
}

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

Регистрация: Apr 2010
Сообщений: 219
Все правильно. Вы же переопределяете пулю и поэтому когда вы обрабатываете ее столкновение сос теной это будет именно последняя пуля.
Заносите пули в массив и пробегйтесь по всем.

Старый 20.10.2010, 15:16
Antony вне форума Посмотреть профиль Отправить личное сообщение для Antony Найти все сообщения от Antony
  № 3  
Ответить с цитированием
Antony

Регистрация: Oct 2010
Сообщений: 14
Я заранее не знаю сколько будет выпущено пуль.

Старый 20.10.2010, 15:17
arkadattx вне форума Посмотреть профиль Отправить личное сообщение для arkadattx Найти все сообщения от arkadattx
  № 4  
Ответить с цитированием
arkadattx

Регистрация: Apr 2010
Сообщений: 219
А вам и не надо, но при создании пули вы ее заносите в массив. При проверке проверяете все содержимое массива. А при удалении пули - удаляете ее из массива.

Старый 20.10.2010, 15:41
Antony вне форума Посмотреть профиль Отправить личное сообщение для Antony Найти все сообщения от Antony
  № 5  
Ответить с цитированием
Antony

Регистрация: Oct 2010
Сообщений: 14
а можно примерчик, чтото не получается. вобще никак(


Последний раз редактировалось Antony; 20.10.2010 в 16:00.
Старый 20.10.2010, 16:03
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код AS3:
private var _bullets:Array = [];
...
private function shoot():void { //Выстрел из пушки
    trace("Pif->");
    bulletclip = new BulletClip(); //Новая пуля
    stage.addChild(bulletclip); //Добавляем на сцену
    _bullets.push(bulletclip); //Добавляем пулю в массив
    bulletclip.x = cannon.x;
    bulletclip.y = cannon.y-38;
   ...
}
Двигать пули и проверять их на столкновение лучше в одном месте по ENTER_FRAME, ну или как у вас там реализованы игровые тики.

Добавлено через 4 минуты
Заодно внимательно почитайте вот этот топик.

Старый 20.10.2010, 18:56
Antony вне форума Посмотреть профиль Отправить личное сообщение для Antony Найти все сообщения от Antony
  № 7  
Ответить с цитированием
Antony

Регистрация: Oct 2010
Сообщений: 14
Благодарю за помощь, все сделал

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

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

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


 


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


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