2012-02-28 13 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と、メインループ内の弾丸オブジェクトへの参照があります。