如何准确修复相机适合视口的触摸点?

How to fix a touch point with camera fit viewport accurately?

FitViewport

当使用此视口并获取触摸点时,如下图第一个 GIF 所示,子弹的方向与触摸点不准确。

StretchViewport

但是使用这个视口,触摸点和子弹方向是完全固定和准确的。

您需要将屏幕坐标转换为世界 space。 如果您申请触摸位置,此代码将对您有用。

 Vector3 unproject(Vector3 screenCoords,
                     float viewportX,
                     float viewportY,
                     float viewportWidth,
                     float viewportHeight);

你可以这样使用它

Vector3 touch=camera.unproject( new Vector3( Gdx.input.getX(), Gdx.input.getY() , 0 ) ,viewportX, viewportY, viewportWidth, viewportHeight);
    touch.x // translated touch x
    touch.y // translated touch y

或者您也可以使用 viewport.unproject() 作为视口,它与第一个视口完全相同。

如果 CameraViewport,请使用视口 class 方法 unproject() 而不是使用相机 class。