0

このメソッドを使用して、画面外のランダムな場所を取得し、すべてのゾンビをスポーンします。

public void initZombie(){ 
            for(int i = 0; i < 100; i++){
                int randomXSpawn = (int) Math.random() * -300 + -50;
                int randomYSpawn = (int) Math.random() * -100 + 800;
                int[][] spawn = {{randomXSpawn,randomYSpawn}};
                for(int j = 0; j < spawn.length; j++){
                    zombie.add(new Zombie(spawn[j][0],spawn[j][1]));
                }
            }
        }

これで私が抱えている問題は、ランダムな場所を取得する 2 つの int が 1 回しか実行されないため、すべてのゾンビが互いにまったく同じ場所にスポーンすることです。ゾンビが異なる場所でスポーンするように、int を複数回実行するにはどうすればよいでしょうか? 代わりにそれらを run() メソッド内に配置しようとしましたが、最初のゾンビが 1 つの場所でスポーンし、次に 99 の他のゾンビが互いの内側の別の場所でスポーンするように 2 回実行されます。

4

4 に答える 4

2

Math.random()値をフロアする整数にキャストしています。Math.random()は double を生成するため、常に0 <= x < 10丸められます。そのため、まったく同じスポーン位置が得られます。

キャストに括弧を追加する必要があります。

int randomXSpawn = (int) (Math.random() * -300 + -50);
int randomYSpawn = (int) (Math.random() * -100 + 800);
于 2013-04-24T22:04:00.723 に答える
1

私があなたなら、Randomオブジェクトを使用し、nextInt関数を呼び出します

Random rnd = new Random();

for(...)
{
    int randInt = rnd.nextInt(300) //300 is the maximum
}
于 2013-04-24T22:01:28.467 に答える
1

spawn配列にインデックスを付けません。実際、私はあなたがそれを必要とさえしていないと思います。これを試して

public void initZombie(int maxZombies){
        Random r=new Random();
        for(int i = 0; i < maxZombies; i++){
                zombie.add(new Zombie(r.nextInt(MAX_X), r.nextInt(MAX_Y));
        }
    }

後でゾンビのスポーン位置を呼び出す必要がある場合は、それをプライベート int としてゾンビ インスタンスに保存できます。

また、元のコードでは、負の定数を乗算するため、負の座標が得られます。new Zombie()そして、それが機能したとしても、コードが内側のループで実行されるため、必要以上のゾンビが発生することになります。

于 2013-04-24T22:05:04.123 に答える