如何准确修复相机适合视口的触摸点?
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() 作为视口,它与第一个视口完全相同。
如果 Camera
有 Viewport
,请使用视口 class 方法 unproject()
而不是使用相机 class。
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() 作为视口,它与第一个视口完全相同。
如果 Camera
有 Viewport
,请使用视口 class 方法 unproject()
而不是使用相机 class。