2016-06-25 19 views
0

私は、複数のシン・プラットフォームが作成される単純なゲームを作ろうとしています。私はすべてが正しく設定されていると思うし、デバッグによって、プラットフォームが適切に(ランダムオフセットで)作成されていることが分かりました。問題は、作成された最後のプラットフォームだけがレンダリングされ、すべてではありません。LibGDX - すべてのスプライトがレンダリングされているわけではありません

private class Platform{ 
    private Vector2 mVelocity; 
    private Vector2 mPosition; 

    private Sprite mTexture; 

    public Platform(int x, int y, int w, int h){ 
     mPosition = new Vector2(x, y); 
     mVelocity = new Vector2(0, 0); 
     mTexture = AssetLoader.mPlatformTexture; 
     mTexture.setSize(w, h); 
    } 

    public void Update(float delta){ 
     mTexture.setPosition(mPosition.x, mPosition.y); 
    } 

    public Sprite GetTexture(){ 
     return mTexture; 
    } 
} 

プラットフォームを再帰的に作成され、ランダム使用して、配列リストに追加されます。

は、私は、プラットフォームの情報(位置、スプライト)を保持している内部プライベートクラスが含まれているプラ​​ットフォームを管理するためのクラスを使用しますオフセット:

public Platforms(){ 
    mPlatforms = new ArrayList<Platform>(); 
    AddPole(50); 
} 

private void AddPole(int x){ 
    if(x < Gdx.graphics.getWidth()){ 
     mPlatforms.add(new Platform(x, RandomInRange(-240, -400), 20, 480)); 
     AddPole(x + RandomInRange(100, 200)); 
    } 
} 

最後に、プラットフォームが更新およびレンダリングされます:

@Override 
public void render(float frameTime) { 
    mRunTime += frameTime; 

    mPlatforms.Update(frameTime); 
    mCharacter.Update(frameTime); 
    mCamera.update(); 

    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    mBatcher.setProjectionMatrix(mCamera.combined); 

    mBatcher.begin(); 
    mPlatforms.Render(mBatcher); 
    mCharacter.Render(mBatcher); 
    mBatcher.end(); 
} 

... 

public void Update(float delta){ 
    for(int i = 0; i < mPlatforms.size(); i++){ 
     mPlatforms.get(i).Update(delta); 
    } 
} 

public void Render(SpriteBatch batcher){ 
    for(int i = 0; i < mPlatforms.size(); i++){ 
     mPlatforms.get(i).GetTexture().draw(batcher); 
    } 
} 

しかし、見ることができるように、1つのプラットフォーム(最後に追加されるもの)のみが描画されます。

enter image description here

私はすぐに明らかであるビット愚かな何かをやっていますか?私はちょうどLibGDXを使いこなすようになりましたので、どんな助けもありがとうございます。

答えて

1

私はlibgdxを知らないが、私はあなたの問題の解決策を知っていると思う。

すべてのプラットフォーム、すなわち、同じテクスチャを持っています

mTexture = AssetLoader.mPlatformTexture; 

だから今は、プラットフォームの位置を更新し、およびコール:

mTexture.setPosition(mPosition.x, mPosition.y); 

プラットフォームごとに同じテクスチャを更新します。つまり、すべてのプラットフォームを更新した後、最後のプラットフォームの位置にテクスチャを配置したことになります。それから、あなたが描くと、その位置にプラットフォームを描きます。もう一方の上に1つ。これを解決するには、2つの方法があります。それぞれのプラットフォームに別々のテクスチャインスタンスを作成するか(テクスチャクラスがわからないので、これを行う方法はわかりません)、または同時に更新と描画を行いますso:

public void UpdateAndDraw(float delta){ 
    for(int i = 0; i < mPlatforms.size(); i++){ 
     mPlatforms.get(i).Update(delta); 
     mPlatforms.get(i).GetTexture().draw(batcher); 
    } 
} 
+0

それは意味があり、働いてくれてありがとう。 – Daniel

関連する問題