libgdx - 找到精灵上边缘的坐标?

时间:2015-01-16 08:36:10

标签: android libgdx coordinates sprite

我需要找到精灵的顶点或其坐标。

我基本上做了一个用户可以移动和旋转精灵的游戏。 这个精灵是一个箭头,当它停止旋转时,我必须找到它沿箭头方向前进的坐标。 我想在原点和精灵的上边缘之间导出一个向量,它对应于箭头的尖端。 并且'可以添加一个锚点指向orirgine?

1 个答案:

答案 0 :(得分:0)

我将回答另一个问题,因为你的问题基于错误的假设。计算精灵原点和精灵顶部之间的方向是个坏主意。它不必要地复杂化了。

为了得到你想要的结果,你需要的是一些简单的三角函数。基本上,您尝试进行线性(x,y)运动并将其转换为任意方向。

我不会给你一个很复杂的解释,说明为什么会有效,但是你要找的是Math java模块中内置的两个触发函数:Sin和Cos。假设你是已经旋转精灵,你可以访问它的旋转角度(可能只是sprite.getRotation()),执行此操作:

setX(getX() + (Math.sin(Math.toDegrees(myAngle)) * speed))
setY(getY() + (Math.cos(Math.toDegrees(myAngle)) * speed))

如果你使用Box2D移动实体,那么只需调用applyLinearImpulse或applyForce,其中x和y参数分别是setX()和setY()内的方程。

在这种情况下,应该每帧更新myAngle,以存储精灵的当前角度。如果默认情况下这是弧度或度数,我无法记得,但如果它已经是度数,那么你显然不需要通过Math.toDegrees()传递它,并且这样做会给你带来奇怪的结果。速度是您希望实体移动的每帧的速度(以像素为单位)。

过长的解释:想想你在将物体从理论圆的中心移动到基于物体指向的方向上的某个点时你想要做什么。这个假想圆的半径是"速度"对象将移动。因此,要从圆的原点找到圆上的点,仅基于方向和原点,使用三角法。

任何角度的正弦值都在0到1之间(对于0度和90度),但它会适当缩放,以使角度越大,数字越慢(与圆弧相关,因此对于例如,如果一个物体在一个圆圈中移动并且你只追踪它的运动的x坐标,它就像一个钟摆 - 见:http://upload.wikimedia.org/wikipedia/commons/3/3b/Circle_cos_sin.gif)。

实际上,余弦正好与正弦相反,因此当你接近90度时它会变小。由于这些数字中的最高值为1,您可以将它们乘以半径,并且假设它们彼此相反,它们将提供圆上的点。

我不知道这是否合情合理,我从来都不擅长解释这样的事情。