【问题标题】:Cannon rotation around pirate ship围绕海盗船的大炮旋转
【发布时间】:2016-01-17 17:38:53
【问题描述】:

我有一艘海盗船,它有大炮,当船不旋转但旋转时它们会(如预期)保持在 0 度时工作。我需要它们在海盗船旋转时围绕中心旋转,因此它们仍然与船图像上的大炮对齐。简单来说,我需要的是这样的:

  1. 大炮相对于船保持相同的旋转(如标题为“我想要的”的图片所示
  2. 大炮在移动时相对于舰船保持相同的位置
  3. 大炮中有一个 Vector2,名为 forwardDirection,我需要它始终指向相对于船的相同方向
  4. 对于位置和旋转,当您将某物作为其他东西的父对象时,它应该与 Unity 3D 和其他游戏引擎中的相同,因为它始终与父对象的相对位置和旋转相同。

我完全不知道该怎么做,所以我需要帮助。此外,这个解释可能不清楚,所以如果有任何不合理的地方,请评论它,我会改变它。

【问题讨论】:

  • 我不明白“我想要什么”和“会发生什么”之间的区别:/
  • 不同的是大炮的方向和位置(每门大炮用箭头表示)
  • 大炮是独立的精灵?
  • 大炮的实际视觉效果在主船精灵上,实际的大炮只是代表炮弹从哪里发射的位置和方向。
  • 你我的朋友需要对每门大炮使用 sin 和 cos 计算来获得子弹来源的新位置。 ;)

标签: libgdx rotation


【解决方案1】:

假设你有 10 门大炮,每个大炮都作为一个对象存储在 List 中。

为方便起见,假设 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 组件,即基本物理)

【讨论】:

  • 谢谢 - 看起来很棒。我有两个问题如下:如何找到大炮的角度/方向以及速度是什么?
  • 你的船一定在以某种速度移动吧?假设每秒 2 个像素或其他东西。那就是速度。就角度而言,您必须保持大炮的角度,它们将与角船所面对的相同。您仍然需要对其进行测试。
  • 哦,我明白了,但是船并不总是以相同的方向甚至相同的速度移动,所以我需要获得相对于船位置的位置
  • 是的,所以当你改变船的方向时,你会改变大炮的方向,当你以一定的速度上下移动你的船时,大炮也应该以相同的速度移动。
  • 好吧,无论你理解什么,试一试。除非您尝试编码,否则您将无法正确理解:)
猜你喜欢
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
相关资源
最近更新 更多