输入如何在libgdx中工作,我应该如何使用box2d坐标进行缩放?

时间:2013-12-04 02:28:18

标签: box2d libgdx scaling

基本上是标题。我已将摄像机设置为在笛卡尔平面的原点左下角。我所有的box2d数字都是这样缩放的,一切看起来都不错,宽30米,高20米。

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

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

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

2 个答案:

答案 0 :(得分:4)

如果您通过相机渲染游戏,则应使用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

答案 1 :(得分:-1)

大多数图形程序将0,0 coord设置为屏幕的左上角。您的描述几乎是修复它的最佳方式。我之前做过的是编写显式函数来从每个coord系统转换。喜欢BoxToPx和PxToBox。通过这种方式,您可以在以后更改这些功能的工作方式,并且整个程序都可以正常工作。