0

アイテム (Sword1) をランダムな場所に生成したいと考えています。スポーンすると、まず1つしか作成されず、ランダムにどこにでも移動します。オブジェクトを作成して配列する必要がありますか? どのように?

    public class Sword1 {

        public static TextureRegion sprite;

        public static int x;
        public static int y;
        public static int size;

        public static boolean created;
        public Sword1(){
            created=true;
            Random r = new Random();
            x = (r.nextInt(5)+1)*GameRender.tilesize;
            y = (r.nextInt(5)+1)*GameRender.tilesize;
            size = GameRender.tilesize;
            sprite = AssetLoader.s1;
            createMe();
        }

        public static void createMe() { 
            GameRender.batch.draw(sprite, x, y, size, size);    
        }

   }

バッチでレンダリングします:

while(number<4){
    number++;
    Items.createSwords();
}   

また、さらにアイテムがある場合にすべてのアイテムを保持するアイテムクラスを使用しようとしました

public class Items {


    public Items(){}

    public static void createSwords() {
        Object sword = (Sword1) new Sword1();
    }
}
4

1 に答える 1

0

Sword1 クラスをクリーンアップして名前を少し変更することができます [静的変数もプライベートに変更しました]。そうしないと、さまざまなクラス インスタンス間で共有されます

public class Sword {

    private TextureRegion sprite;

    private int x;
    private int y;
    private int size;

    public Sword() {
        Random r = new Random();
        x = (r.nextInt(5)+1)*GameRender.tilesize;
        y = (r.nextInt(5)+1)*GameRender.tilesize;
        size = GameRender.tilesize;
        sprite = AssetLoader.s1;        
    }

    public void createMe() { 
        GameRender.batch.draw(sprite, x, y, size, size);    
    }
}

次に、使用できる複数の剣と、コメントで指定されているように、Sword オブジェクトGameRenderを使用しているクラスであるSwordsの ArrayList を取得します。

    private List<Sword> swords = new ArrayList<Sword>();

Array の詳細については、Oracle のドキュメントを参照してください。

これで、Swords オブジェクトのリストができました。このリストは、新しく作成された Sword オブジェクトを保存し、後でレンダリングするために使用されます。

剣を作る

//create 10 swords
for (int i = 0; i<10 ; i++ ) {
    swords.add(new Sword());
}

剣をレンダリングし、各オブジェクトで create メソッドを呼び出します

for (Sword sword : swords) {
    sword.createMe();
}

たとえば、GameRender クラスの最小限の例

public class GameRender() { 
    private List<Sword> swords = new ArrayList<Sword>();

    public GameRender(){
        // create the swords
        for (int i = 0; i<10 ; i++ ) {
            swords.add(new Sword());
    }

    // render the swords
    public void render() {
        for (Sword sword : swords) {
            sword.createMe();
        }

    }

}
于 2014-10-25T19:04:41.973 に答える