基本上是标题。我已将摄像机设置为在笛卡尔平面的原点左下角。我所有的box2d数字都是这样缩放的,一切看起来都不错,宽30米,高20米。
出于某种原因,输入似乎仍然是像素而不是米,这是有道理的,但Y值从屏幕顶部开始向下。
有人知道那是为什么吗?这只是android或openGL的方式吗?
无论如何要修复它,我是否只使用简单的比率将输入转换为其他组件使用的相同比例,然后将y输入值作为maxYvalue-y?或者有更好的选择吗?
答案 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。通过这种方式,您可以在以后更改这些功能的工作方式,并且整个程序都可以正常工作。