我正在尝试在此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/

10-10 13:23