ActionScript 3: рикошетирование пули - PullRequest
3 голосов
/ 28 февраля 2012

У меня проблема с кодом ActionScript. Я довольно новичок во Flash и AS3, поэтому я прошу прощения, если мой код кажется грубым или элементарным, но я делаю это как можно лучше.

Ну, в этом проекте я пытаюсь один раз выстрелить в стену рикошетом. Если после рикошета он снова ударит о стену, пуля исчезнет.

Я создал цикл for, который перемещает маркеры в массиве. В то же время я стараюсь отслеживать количество рикошетов каждой пули. Это прекрасно работает, когда я стреляю первой пулей - она ​​рикошетит, а затем исчезает после удара другой стены. Тем не менее, каждая пуля, которую я стреляю после этого, исчезает на первой стене, в которую она попадает, прежде чем она рикошетит. Я пытался заставить это работать, но я просто не могу этого сделать.

Буду признателен, если кто-нибудь покажет мне проблему или предложит изменить мой код. Вот ссылка на мой код, как сейчас.

Спасибо всем, кто помогает.

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Я вижу как минимум пару проблем с вашим кодом:

  1. Ваш ricochetcount явно не синхронизирован.то есть вам также необходимо удалить элемент из этого массива.
  2. Когда вы удаляете элемент из массива bulletholder (через clearBullet), вы все равно увеличиваете i, что означает, что вы завершаетеслучайно пропустить элемент.

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

1 голос
/ 28 февраля 2012

Вот несколько советов, которые у меня есть:

1: Создайте класс Bullet, который отслеживает собственные столкновения со стенами. Я бы также переместил метод clearBullet() в сам класс bullet.

public class Bullet extends Sprite
{

    public var collisions:int = 0;
    public var xv:Number = 0;
    public var yv:Number = 0;


    public function clear():void
    {
        if(parent)
            parent.removeChild(this);
    }

}

2: Обновите цикл, чтобы справиться с этой новой информацией.

for each(var i:Bullet in bulletholder)
{
    // Move bullet.
    // Check for collision.

    // When there is a collision, do this:
    i.collisions ++;

    if(i.collisions >= 2)
    {
        var n:int = bulletholder.indexOf(i);
        bulletholder.splice(n, 1);

        i.clear();
    }
    else
    {
        // Deal with changing bullet position.
    }
}
...