gpt4 book ai didi

java - OrthogonalTiledMapRenderer 和正常的 Spritebatch 渲染一个白框?

转载 作者:行者123 更新时间:2023-11-29 10:16:38 25 4
gpt4 key购买 nike

我正在使用 Libgdx 渲染一个 TileMap 作为我游戏的背景。稍后我可能会渲染一些不同的图层。没有 tilemap 渲染器和单个背景图片,它可以正常工作!当我使用 TiledRender 时,会发生一些奇怪的事情,看看它: tiled scene with big white box in the upper left

两个白色区域通常是触摸板和字符。

触摸板和角色呈现:

@Override
public void draw(SpriteBatch batch, float parentAlpha) {
sprite.draw(batch);
}

我渲染 TileMap 的 map 如下所示:

public class Map extends Actor {
private TiledMap map;
private OrthogonalTiledMapRenderer render;
public int[][] mapArray = new int[Config.X_SIZE][Config.Y_SIZE];

public Map(TiledMap map){
this.map = map;
this.render = new OrthogonalTiledMapRenderer(map,(((float)Config.VIRTUAL_VIEW_HEIGHT/Config.Y_SIZE)/(float)Config.TILE_SIZE));
this.toBack();
}

@Override
public void draw(SpriteBatch batch, float parentAlpha) {
this.render.setView((OrthographicCamera) this.getStage().getCamera());
render.render();
}
}

有任何解决 SpriteBatch 问题的建议吗?

最佳答案

许多 Libgdx 渲染助手对象假定它们“拥有”OpenGL 运行时中的状态,因此如果其中两个同时对 OpenGL 进行更改,输出会变得困惑。在你的例子中,OrthogonalTiledMapRenderer 有它自己的 SpriteBatch,所以你有两个 SpriteBatch(静静地)互相争斗。

尝试更改您的 Map.render() 方法以在渲染 map 之前结束正在进行的 SpriteBatch(然后重新启动它):

@Override
public void draw(SpriteBatch batch, float parentAlpha) {
batch.end();
this.render.setView((OrthographicCamera) this.getStage().getCamera());
render.render();
batch.begin();
}

如果这有帮助,您可以考虑将您的瓦片 map 设置为与您的代码的其余部分“共享”相同的 SpriteBatch(因为这些对象有些重)。这应该更有效,并且应该消除结束/启动 SpriteBatch 的需要。

关于java - OrthogonalTiledMapRenderer 和正常的 Spritebatch 渲染一个白框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15883120/

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