我正试图在这个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()的参数吗?
答案 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的源代码中删除