2

私は Java でゲームを作ろうとしていますが、すでに何かを持っています。しかし、私はプレイヤーに弾丸を撃たせたいと思っています。オブジェクト配列を作成し、すべての Bullet インスタンスを配列に入れるというアイデアを思いつきました。次に、スレッドで、それらをすべて移動させたい(配列内のすべてのオブジェクト)。

これは私がメインクラスに入れたものです:

Bullet[] BulletArray;

public int Bullets = 0;

public void run() {

    for(int i = 0; i < Bullets; i++){
        BulletArray[i].Step();
    }

    if(Key.FireKey){
        BulletArray[Bullets + 1] = new Bullet();
        Bullets += 1;
    }
}

元のコードには、基本的なもの、つまり run 関数は正常に実行されるものを含めただけです。コードが機能しません。Fire を押すとエラーが表示されます。エラーはどこかにあります

BulletArray[Bullets + 1] = new Bullet();

私の言いたいことを理解していただければ幸いです。

4

1 に答える 1

2

まず第一に、あなたBulletArrayは決して初期化されません。

を入力するrun()と、for()ループは実際にはブロックに入らないため、正常に動作しているように見えます。あなたのint i = 0は宣言されており、既に制限以上である ですint Bullet = 0。これは、ループの本体が実行されないことを意味します。

次に、 を押すとKey.FireKey、存在しない配列インデックスを参照しようとします。配列が初期化されていないため、存在できません。

配列を初期化するには、次のようにする必要があります。

private int maxBullets = 10;
Bullet[] bulletArray = new Bullet[maxBullets];

次に、for()ループが実際に入ります。ただし、ブロック内では、作成したよりも多くの弾丸を発射しようとして失敗しKey.FireKeyないように、いくつかのチェックを実行する必要があることに注意してください。IndexOutOfBoundsExceptionつまり、

if(Key.FireKey) {
    if(bullets < maxBullets) {
        bulletArray[++bullets] = new Bullet();
    }
}
于 2012-10-03T16:18:42.323 に答える