0

我在游戏地图上有两个矩形(称为 A 和 B),我计算了从 B 中心到 A 的角度。我有生成第三个 (C) 并将其从 B 射到 A 的代码。问题是在我的游戏中,其中两个游戏元素永远不应该重叠(它们通常具有碰撞代码),因此“射击”代码被停止 - 在顶部生成 C 无法正常工作。

我的解决方案(告诉我是否有更好的解决方案)是在父级边缘旁边生成第三个矩形- 但要使 UI 正常运行,它需要始终从面向矩形 A 的父级边缘生成。

我知道矩形 B 的中心坐标,我知道从 B 到 A 的角度(可以是弧度或度数),我如何确定角度将指向哪一侧(左、上、右、下)?

4

3 回答 3

0

想想位于单位圆上的正方形,其中心位于原点。然后弄清楚 Java 的行为是否像 JavaScript 那样从标准的三元法倒退。(pi/2 在 JS 中是直下的,而在标准三角中是直上的)。矩形对象也有可能有帮助的边界和交叉方法。

此页面下方的图形可能会有所帮助:http ://en.wikipedia.org/wiki/Unit_circle

于 2013-05-27T15:20:03.860 回答
0

当我用这样的碰撞引擎编写游戏并且需要弹丸发射行为时,我采用了几种不同的方法。

首先,我维护了对发射弹丸的实体的引用。然后在碰撞检测方法中,我与这个参考进行了比较。

另一种可能更可取的选择是将实体与“派系”相关联。这可以建模为枚举。然后碰撞检测代码可以检查以确保两个实体不在同一派系中。您还可以使用映射来确定哪些派系相互冲突。例如,您可能有“敌对”、“中立”和“玩家”派系,并且玩家派系实体不会与中立等发生冲突。这取决于您游戏的“业务规则”。

如果你这样做,你可以在任何你想要的地方产生射弹。

于 2013-05-27T15:36:30.937 回答
0

假设这angle是从中心B到中心的角度A,在区间-pi..pi 中以弧度给出,那么以下应该做你想要的(记住,就像@Jared 建议的那样,正角度是向下而不是向上):

double halfPi = Math.PI/2;
double theta = Math.atan2(B.height, B.width);
if (angle >= theta+halfPi || angle <= -theta-halfPi) {
    // left side
} else if (angle >= theta) {
    // bottom side
} else if (angle >= -theta) {
    // right side
} else {
    // top side
}
于 2013-05-27T21:17:44.843 回答