簡體   English   中英

LibGDX-並非所有的精靈都被渲染

[英]LibGDX - Not all sprites being rendered

我正在嘗試制作一個簡單的游戲,其中創建了多個瘦平台。 我相信一切都設置正確,並且通過調試,我發現平台創建正確(帶有隨機偏移)。 問題是,僅渲染最后創建的平台,而不渲染所有平台。

我使用一個類來管理平台,該類包含一個內部私有類,用於保存平台信息(位置,子畫面):

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);
    }
}

但是可以看出,僅繪制了一個平台(要添加的最后一個平台)。

在此處輸入圖片說明

我在做些愚蠢的事情,立即顯而易見嗎? 我剛剛開始使用LibGDX,所以我們將不勝感激。

我不了解libgdx,但我想我知道您問題的解決方案。

每個平台具有相同的紋理,即:

mTexture    = AssetLoader.mPlatformTexture;

因此,現在您更新平台的位置,然后調用:

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

為每個平台更新相同的紋理。 這意味着在更新所有平台之后,您已將紋理放置到最后一個平台的位置。 然后繪制,然后在該位置繪制平台很多次。 一個在另一個之上。 您可以通過兩種方法解決此問題,或者為每個平台創建一個單獨的紋理實例(由於我不知道紋理類,我無法向您展示如何執行此操作),或者同時進行更新和繪制,例如所以:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM