Форум 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=145813)

Antony 20.10.2010 15:12

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

Код 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(); //Функция останавливает и взрывает пулю
        }
 
    }
 
}


arkadattx 20.10.2010 15:15

Все правильно. Вы же переопределяете пулю и поэтому когда вы обрабатываете ее столкновение сос теной это будет именно последняя пуля.
Заносите пули в массив и пробегйтесь по всем.

Antony 20.10.2010 15:16

Я заранее не знаю сколько будет выпущено пуль.

arkadattx 20.10.2010 15:17

А вам и не надо, но при создании пули вы ее заносите в массив. При проверке проверяете все содержимое массива. А при удалении пули - удаляете ее из массива.

Antony 20.10.2010 15:41

а можно примерчик, чтото не получается. вобще никак(

alatar 20.10.2010 16:03

Код 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 минуты
Заодно внимательно почитайте вот этот топик.

Antony 20.10.2010 18:56

Благодарю за помощь, все сделал:)


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

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