OrthogonalTiledMapRenderer和普通的Spritebatch渲染一个白盒子?

Ben*_*nnX 1 java android libgdx

我使用Libgdx渲染TileMap作为我游戏的背景.我稍后可能会渲染一些不同的图层.如果没有tilemap渲染和单个背景图片,它可以正常工作!当我使用TiledRender时,会发生一些奇怪的事情: 平铺的场景与左上方的大白框

两个白色区域通常是触摸板和角色.

触摸板和角色渲染为:

@Override
   public void draw(SpriteBatch batch, float parentAlpha) {
      sprite.draw(batch);
   }
Run Code Online (Sandbox Code Playgroud)

我在我的TileMap中渲染的地图如下所示:

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();
   }
}
Run Code Online (Sandbox Code Playgroud)

任何sugestions来修复SpriteBatch问题?

P.T*_*.T. 6

许多Libgdx呈现辅助对象假设它们"拥有"OpenGL运行时中的状态,因此如果您有两个同时对OpenGL进行更改,则输出会变得混乱.在你的情况下它OrthogonalTiledMapRenderer有自己的SpriteBatch,所以你有两个SpriteBatch(默默地)互相争斗.

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

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

如果这有帮助,您可能会考虑将您的磁贴地图设置SpriteBatch为与其余代码"共享" (因为这些是有点重的对象).这应该更有效率,应该消除结束/启动的需要SpriteBatch.