我试图让我的玩家射出一个咒语,然后它会移动到玩家点击的地方。我可以通过以下方式轻松完成此任务。
if(position.x >= destination.x - 1 && position.x <= destination.x + 1)
reachedX = true;
if(position.y >= destination.y - 1 && position.y <= destination.y + 1)
reachedY = true;
然而,如果玩家原点位于例如0,0并且我点击10,300然后它向右和向上行进但是当该法术达到x为10时它直接向上行进。我希望法术以一个角度行进,它将与y坐标同时到达x坐标。这是一张图片,展示了发生了什么以及我想要发生什么。
答案 0 :(得分:4)
在第一张照片中,它看起来像是45度,直到它到达正确的x坐标。无论目标点在哪里,这听起来都是x和y速度相等
你应该有一个方向,取决于x和y的速度
为此你首先需要明白,玩家正在点击
因此,您可以实施InputProcessor
,并touchDown(int screenX, int screenY, int pointer, int button)
screenX
和screenY
参数以屏幕坐标(像素)给出,因此需要转换为您的世界坐标。这可以使用camera
或viewport
以及unproject(Vector2 screenCoords)
来完成。此方法返回Vector2
,给出世界坐标
现在,您需要找出您与点击点之间的方向Vector2
。方向Vector
的计算方式如下:
new Vector2(otherPos.x - myPos.x, otherPos.y - myPos.y).nor();
这将返回两点之间的标准化方向Vector
现在你只需要在x方向上移动dir.x*spellSpeed*delta
,在y方向移动dir.y*spellSpeed*delta
,它应该在你的第二张图片中显示。