libgdx在相机的某个X坐标处渲染tilemap

时间:2013-09-05 11:01:15

标签: java android libgdx

我正试图在这个Android游戏中实现无限滚动。为了测试这个,我只是用相同的.tmx文件创建两个tilesMaps,然后根据它们的x值一个接一个地渲染它们。

问题是我无法让这个setView工作:

TiledMap tiledMap2 = new TiledMap();
TmxMapLoader loader2 = new TmxMapLoader();
tiledMap2 = loader2.load("data/map1.tmx");


OrthogonalTiledMapRenderer tileRenderer2 = new OrthogonalTiledMapRenderer(tiledMap2);
tileRenderer2.setView(camera.combined, 512, 0, 512, 512);
tileRenderer2.render();

现在,如果我只使用

,我可以更早地使用这一段代码
tileRenderer2.setView(camera);

而不是

tileRenderer2.setView(camera.combined, 512, 0, 512, 512);

我的问题是第一个带有setView()的参数吗?

1 个答案:

答案 0 :(得分:1)

只需改变相机的位置就可以了。 camera.position.x = ...camera.position.y = ... 使用setView,您只需定义确定视图的Camera。它没有定义相机的位置。它只是内部优化渲染的视图边界。

@Override
public void setView(OrthographicCamera camera) {
    spriteBatch.setProjectionMatrix(camera.combined);
    float width = camera.viewportWidth * camera.zoom;
    float height = camera.viewportHeight * camera.zoom;
    viewBounds.set(camera.position.x - width / 2, camera.position.y - height / 2, width, height);
}

在RenderTileLayer方法中使用的内容用于获取可见的第一个和最后一个切片:

final int col1 = Math.max(0, (int) (viewBounds.x / layerTileWidth));
final int col2 = Math.min(layerWidth, (int) ((viewBounds.x + viewBounds.width + layerTileWidth) / layerTileWidth));

final int row1 = Math.max(0, (int) (viewBounds.y / layerTileHeight));
final int row2 = Math.min(layerHeight, (int) ((viewBounds.y + viewBounds.height + layerTileHeight) / layerTileHeight)); 
//here does follow the rendering

从libGDX的源代码中删除