2016-12-15 9 views
0

LibGdx私はこのような私のlibGdxプロジェクト内のオブジェクトの配列を作成したオブジェクト配列

Array<Bird> birds = new Array<Bird>(); 

ここでは鳥が一つのオブジェクトクラスです。

私は10個のバードオブジェクトを画面上に1つずつ描きたいと思います。私はこのようにしました。

private void MakeBird() { 

    Bird b = objectFactory.createBird(); 

    for (int i = 0; i < 10; i++) { 
     birds.add(b); 

    } 

} 

のObjectFactoryのcreateBird方法:ここで

public Bird createBird() { 
    Bird bird = new Bird(); 
    bird.setPosition(0,0); 
    return bird; 
} 

私は、配列のサイズを印刷しようとすると、continuousely.Howが、私はこれを適切に実装することができます増加しているだけで10 objects.Butしたいですか? また、spriteBatchを使用してこれらの配列オブジェクトを描画する方法も知りたいと思います。 コードを使って説明を受けると非常に役に立ちます。

+0

あなたの 'MakeBird()'メソッドは1つの鳥を作成し、それをあなたが望んでいないものに10回追加します。継続的にインクリメントするサイズは、一度ではなく、毎フレームで 'MakeBird()'を呼びますか? – Tenfour04

答えて

2

MakeBird()のバージョンは、単純に10倍birds配列に同じオブジェクトを追加することになり、この

private void MakeBird() { 
    int birdsToAdd = 10 - birds.length; 
    for (int i = 0; i < birdsToAdd ; i++) { 
     birds.add(objectFactory.createBird()); 
    } 
} 

に、あなたのMakeBird()機能を変更する必要がありbirds配列定数の大きさを保つために。だから、なぜこれは悪いのですか? Javaオブジェクトは参照型であるため、あるオブジェクトを変更するとそのオブジェクトへの参照もすべて変更されます。あなたの場合、配列内の1つの鳥の位置を変更すると、すべての鳥の位置が変更されます。これが意図的なのかどうかわかりません。しかし、異なるBirdオブジェクトを追加する場合は、上記の実装のようにMakeBird()関数を使用する必要があります。そこにニースキャッチmarius。 、あなたは、renderまたはdraw方法を含むようにあなたのBirdクラスを更新されて何ができるか(あなたが好きなメソッドに名前を付けることができます)画面にこれらのオブジェクトをrenderする方法についてのとでは、あなたの2番目の問合せについては

あなたメインクラスBirdクラスのrender/drawメソッドを呼び出すにはrenderメソッドを更新する必要があります。

//Bird class 
class Bird { 
    //Your data members 
    //Your member functions 

    public void draw(SpriteBatch batch) { 
     batch.draw(some_bird_image, bird_x_position, bird_y_position); 
    } 
} 

//Render method in main class 
public void render() { 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    batch.begin(); 
    for(Bird bird : birds) { 
     bird.draw(batch); 
    } 
    batch.end(); 
} 
1

forループ実行ごとに新しいBirdオブジェクトを作成する必要があります。したがってbirds.add(b)の代わりにbirds.add(objectFactory.createBird())と記述してください。私は最初のエラーを修正する必要がありますと思います。

あなたは何とかそれがhere decribedされるように、次を実装する必要があります。

public class Game implements ApplicationAdapter { 
    private SpriteBatch batch; 
    private Texture texture; 

    public void create() { 
     batch = new SpriteBatch(); 
     texture = new Texture(Gdx.files.internal("example.png")); 
    } 

    public void render() { 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // This cryptic line clears the screen. 
     batch.begin(); 
     batch.draw(texture, 10, 10); 
     batch.end(); 
    } 
} 

しかし、非常に使いやすさと、あなたはそれのためのチュートリアルをたくさん見つけることができるので、私は本当に、Box2Dを使用することをお勧めいたします。

関連する問題