-1

次の方法を使用して、以前に使用されたことのないポイント (座標) を見つけようとしていますが、以前に使用したアイテムと座標の境界内にありません。

それが機能する方法は、「ベース」(RTS トップダウン ゲーム) をレンダリングしていて、x と y の 2 つの確率変数の場所を作成していることです。これらをベース テクスチャと共に次のメソッドに渡します。このメソッドは、以前にレンダリングされた各ベースの四角形である四角形のリストをループ処理します。ポイントがいずれかの長方形内にある場合は、別の座標セットを使用してメソッドが再度呼び出されます。長方形内にないセットが見つかるまで、これを行います。次に、これらの座標で新しい四角形をリストに追加し、ゲームが新しいベースをレンダリングできるようにそれらを返します。

ただし、ベースはまだ重複しています。

メソッドは次のとおりです。

private Point getCoords(int x, int y, Texture t){
    for (int i=bases.size()-1; i> -1; i--) {
        if (bases.get(i).contains(new Point(x,y))){
            x = new Random().nextInt(map.getWidth() * map.getTileWidth());
            y = new Random().nextInt(map.getHeight() * map.getTileHeight());
            getCoords(x, y, t);
        }
    }
    bases.add(new Rectangle(x,y,t.getImage().getWidth(), t.getImage().getHeight()));
    return new Point(x, y);
}

そして、これが呼び出されている場所です:

switch(ran){
            default:
                int x = new Random().nextInt(map.getWidth() * map.getTileWidth());
                int y = new Random().nextInt(map.getHeight() * map.getTileHeight());
                Point p = getCoords(x, y, temp);
                map.generateBase("air", p.x, p.y);
                break;
        }

ここで何が間違っているのでしょうか?

ありがとう

4

3 に答える 3

1
            int x = new Random().nextInt(map.getWidth() * map.getTileHeight());

コピペが下手なのかもしれません。そうかも知れない :

            int x = new Random().nextInt(map.getWidth() * map.getTileWidth());

両方のコードで:-D

于 2016-02-19T14:13:12.460 に答える