我正在尝试在此Android游戏中实现无限滚动。为了测试这一点,我只是用相同的.tmx文件创建了两个tiledMap,然后针对它们的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()的第一个参数吗?
最佳答案
只需更改相机的位置即可。 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的所有源代码
关于java - libgdx在相机的某个X坐标处渲染tiledmap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18634596/