gpt4 book ai didi

java - LibGDX - 并非所有 Sprite 都被渲染

转载 作者:行者123 更新时间:2023-12-01 09:46:01 27 4
gpt4 key购买 nike

我正在尝试制作一个简单的游戏,其中创建了多个薄平台。我相信一切都设置正确,并且通过调试,我发现平台创建正确(具有随机偏移)。问题是,仅渲染最后创建的平台,而不是全部。

我使用一个类来管理平台,其中包含一个保存平台信息(位置、 Sprite )的内部私有(private)类:

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

但是可以看到,只绘制了一个平台(最后添加的一个)。

enter image description here

我是不是在做一些显而易见的傻事?我刚刚开始摆弄 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);
}
}

关于java - LibGDX - 并非所有 Sprite 都被渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38030731/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com