0

我正在尝试在这个 Android 游戏中实现无限滚动。为了测试这一点,我只是用相同的 .tmx 文件创建了两个 tiledMaps,然后根据它们的 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() 的第一个参数有关吗?

4

1 回答 1

1

只需更改相机的位置即可。camera.position.x = ...使用 setView ,camera.position.y = ... 您只需定义定义视图的相机。它不定义相机的位置。它只是内部优化渲染的视图边界。

@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 源代码的一切

于 2013-09-05T15:16:24.780 回答