Libgdx +旋转精灵指向触摸位置

时间:2012-07-24 04:31:37

标签: java libgdx

我在尝试将“arrow_sprite”指向触摸位置时遇到问题。

我想要的结果是箭头(我要旋转的精灵)将指向触摸位置。

我怎样才能实现这个目标?

3 个答案:

答案 0 :(得分:3)

您需要计算触摸位置和精灵位置之间的向量。为此,您必须取消投影通过InputProcessor接收的触摸位置。

public class MyInputProcessor implements InputProcessor {
   ...

   @Override
   public boolean touchDown (int x, int y, int pointer, int button) {
      Vector3 touchDown = new Vector3(x, y, 0);
      camera.unproject(touchDown);
      Vector3 spritePosition = new Vector3(yourSpriteX, yourSpriteY, 0);
      spritePosition.sub(touchDown);
      return false;
   }

   ...
}

现在我们有一个从精灵指向触摸位置的矢量。从那里你只需要计算旋转角度。一种方法是使用Vector2.angle(),因此从spritePosition Vector3创建一个Vector2。

答案 1 :(得分:3)

如果你想用2D绘图,那么你必须将你的SpriteBatch设置为Camera.combined,

类似这样的东西:yourBatch.setProjectionMatrix(yourCamera.combined);

然后你必须像“批处理”那样取消投影相机。

之后,您必须选择是否要使用矢量或2d坐标。角度计算的基本同心结束:

首先定义一个浮动度,然后在touchDown方法中使其如此:

degrees = (float) ((Math.atan2 (touchPoint.x - arrowPosition.x, -(touchPoint.y - arrowPosition.y))*180.0d/Math.PI)+90.0f);

假设您对输入和箭头使用Vector3或2。

然后渲染箭头精灵:

Batch.draw(Arrow, x, y, originX, originY, width, height, scaleX, scaleY, degrees);

希望这会有所帮助。

答案 2 :(得分:0)

就像Psilopat说的那样,我们通过以下方式定义学位:

degrees = (float) ((Math.atan2 (touchPoint.x - arrowPosition.x, -(touchPoint.y - arrowPosition.y))*180.0d/Math.PI)+90.0f);

但如果旋转似乎错误,请将行尾的“+ 90.0f”更改为其他内容。我的箭头朝上,所以我把它改成“-180.0f”