如何使用Libgdx在等轴测场景中移动相机



我正在使用LibGdx创建一个具有等距透视的游戏。我的代码基于以下示例:等距瓷砖拾取

我需要在屏幕上居中放置一个互动程序。我试过用camera.lookAt(),但它不起作用。

public boolean tap(float screenX, float screenY, int count, int button) {
    touch.set(screenX, screenY, 0);
    cam.unproject(touch);
    touch.mul(invIsotransform);
    pickedTileX = (int) touch.x;
    pickedTileY = (int) touch.y;
    cam.lookAt(pickedTileX, pickedTileY, 0);

有什么想法吗?谢谢

您的代码不起作用的原因是pickedTileXpickedTileY都位于世界坐标中,在正交网格中,每个瓦片的宽度和高度为1个单位。

要将相机对准正在查看的互动程序,实际上不需要找出单击了哪个互动程序。您只需要点的世界坐标和屏幕大小。下面的代码应该做到这一点:

public boolean tap(float screenX, float screenY, int count, int button) {
    touch.set(screenX, screenY, 0);
    cam.unproject(touch);
    //Centralise the camera around the touch point
    cam.position.set(touch.x - cam.viewportWidth / 2,
                     touch.y - cam.viewportHeight / 2,
                     cam.position.z);

您之前使用lookAt方法所做的只是在不平移相机的情况下更改相机的方向。

通过将Basim Khajwal的响应与渲染图算法中使用的相同公式相结合,我终于找到了解决问题的方法。

    float x_pos = (pickedTileX * tileWidth / 2.0f) + (pickedTileY * tileWidth / 2.0f);
    float y_pos = -(pickedTileX * tileHeight / 2.0f) + (pickedTileY * tileHeight / 2.0f);
    touch.set( x_pos,  y_pos, cam.position.z);
    cam.position.set(  touch.x , touch.y, cam.position.z);

现在我可以居中放置任何瓷砖,即使旋转和缩放我的场景也能很好地工作。(我不知道为什么Basim的方法效果不佳,这是有道理的)。

非常感谢Basim。

相关内容

  • 没有找到相关文章

最新更新