我在尝试将“arrow_sprite”指向触摸位置时遇到问题。
我想要的结果是箭头(我要旋转的精灵)将指向触摸位置。
我怎样才能实现这个目标?
答案 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”