我有一艘海盗船,它有大炮,当船没有旋转时可以工作,但是当它在0度时停留(如预期的那样)。我需要它们在旋转时绕着海盗船的中心旋转,所以它们仍然与船上图像上的大炮一致。简而言之,我需要的是:
forwardDirection
的Vector2,我需要它总是指向相对于船的方向我完全不知道如何做到这一点,所以我需要帮助。这个解释也许并不清楚,所以如果有什么不合理的话,那么就对它进行评论,然后我就改变它。
答案 0 :(得分:1)
假设您有10门大炮,每个大炮都作为一个对象存储在列表中。
为了方便起见,让我们说cannon1是List.get(0)(获得第一门大炮)
float newX = calculateDistanceX(ship.velocity, cannon1.currentAngle) + cannon1.xPosition;
float newY = calculateDistanceY(ship.velocity, cannon1.currentAngle) + cannon1.yPosition;
cannon1.setX(newX);
cannon1.setY(newY);
/**
* Calculates the offset which needs to be added to the X position according
* to the angle .
*
* @param velocity
* The velocity
* @param angle
* The angle
* @return The offset which needs to be added
*/
protected float calculateDistanceX(float velocity, float angle) {
return velocity * MathUtils.cos(MathUtils.degreesToRadians * angle);
}
/**
* Calculates the offset which needs to be added to the Y position according
* to the angle.
*
* @param velocity
* The velocity
* @param angle
* The angle
* @return The offset which needs to be added
*/
protected float calculateDistanceY(float velocity, float angle) {
return velocity * MathUtils.sin(MathUtils.degreesToRadians * angle);
}
现在通过这种方式你可以用船移动你的大炮。当你上下移动船时,这个公式将改变你的大炮的位置。为你所有的大炮做这个,你会得到他们的位置。
可能有更好的方法可以做到这一点,但这就是我在游戏中的表现,它适用于单个大炮。
希望这能为您提供如何解决问题的基本知识。 (它的数学位,基本上是解析sin和cos分量,即基本物理)