输入如何在libgdx中工作,以及我应该如何使用box2d坐标缩放它们



基本上就是标题。我把相机设置成左下角在笛卡尔平面的原点。我所有的box2d数字都是这样缩放的,一切看起来都很好,30米宽,20米高。

出于某种原因,输入似乎仍然以像素而不是米为单位,这是有道理的,但Y值从屏幕顶部开始并向下。

有人知道为什么吗?这就是android或openGL的方式吗?

无论如何,我只是使用简单的比率来将输入转换为其他组件使用的相同比例,然后将y输入值作为maxYvalue-y吗?或者还有其他更好的选择吗?

如果通过相机渲染游戏,则应使用camera.unproject(screenX, screenY)屏幕位置转换为(cameraX, camerY)相机的位置。然后使用(cameraX, camerY),您可以轻松地转换到Box2D位置(或者可能不需要,因为(cameraX, camerY)在某些情况下是Box2D位置)。示例代码:

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    Vector3 v3 = new Vector3(screenX, screenY, 0);
    camera.unproject(v3);
    // now v3.x and v3.y is the camera's position of your touch
    return true;
}

注意:我不建议每次收到触摸输入时都创建一个新的Vector3,这只是一个简单的例子。您应该在全局作用域或类作用域中创建自己的临时Vector3

大多数图形程序都将0,0坐标设置为屏幕的左上角。你的描述几乎是解决这个问题的最好方法。我之前所做的是编写从每个coord系统转换的显式函数。如BoxToPx和PxToBox。通过这种方式,您可以在以后更改这些功能的工作方式,整个程序将正常工作。

最新更新