2012-02-28 2 views
3

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

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

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

Я был бы признателен, если кто-нибудь может показать мне проблему или предложить изменить мой код. Here is a link to my code as it is now.

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

+0

принять изменения в разработке игр, чтобы получить дополнительную помощь –

+0

Спасибо за предложение. Я это сделаю. – Lucas

+0

Я предлагаю создать класс «Bullet», который содержит информацию о том, сколько раз он ударил по стене, чтобы вы могли легче работать с вашей информацией. – Marty

ответ

1

Вот несколько предложений, которые я:

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

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. 
    } 
} 
1

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

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

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