gpt4 book ai didi

java - Java游戏中的碰撞检测?

转载 作者:搜寻专家 更新时间:2023-11-01 04:03:46 26 4
gpt4 key购买 nike

我正在开发一款游戏,其中存在运动图像碰撞检测的问题。该游戏有一艘宇宙飞船和一些小行星(障碍物)。我想检测它们之间的碰撞。我该怎么做?

最佳答案

碰撞检测通常对矩形以外的任何东西都很棘手。

我过去这样做的方法是为每个对象提供图像和 mask 。因此,例如,来自 Lost in Space 的木星 2 号宇宙飞船这样的物体将具有以下图像和 mask :

     X            00000100000
XXXXXXX 00111111100
X X 01111111110
X X 11111111111
X X 01111111110
XXXXXXX 00111111100
XXX 00001110000

图像 是显示在屏幕上的内容,而 mask 是用于碰撞检测的内容。您会注意到蒙版中的 1 基本上是图像的轮廓和内容。

检测碰撞的方式:

  • 检查矩形是否重叠。否则,就不可能发生碰撞。
  • 否则创建一个包含其掩码的对象编号 1 的矩形。
  • 构造对象 2 的另一个矩形,由其掩码组成。
  • 按位与矩形 2 与矩形 1 的重叠部分。
  • 如果矩形 1 中还有任何 1 位,则发生碰撞。

这考虑了“有惊无险”,即每个对象的边界矩形重叠,但不一定是对象勾勒出自己的轮廓。按位运算符是检测这一点的有效方法。

这是一个箭头未完全击中气球的示例 - 在我的图形设计技能面前颤抖:

....xx....
..xx..xx..
.x......x.
.x......x.
x........x
x........x
.x......x.
.x......x.
..xx..xx..
....xx.**y.....
.y......
yyyyyyyy
.y......
..y.....

您可以看到,即使矩形重叠(参见 **y),箭头实际上并未与气球接触。通过对掩码应用按位与运算,这些位将最终为零,从而导致非冲突。


@kyoryu 在他的评论中提出了一个有趣的观点。一些游戏可以很好地适应由较小的矩形组成的对象,您可以基于矩形组件简化碰撞检测(无需担心像素完美)。例如,我们的老 friend 太空入侵者(实际上是那个游戏中对抗太空入侵者的防御者)可能由两个矩形 X 和 Y 组成,导弹由 Z 组成:

    YYYY                .Z.
YYYY .Z.
XXXXXXXXXXXX .Z.
XXXXXXXXXXXX ZZZ
XXXXXXXXXXXX .Z.
XXXXXXXXXXXX

这将归结为导弹与两个太空入侵者矩形的简单矩形检查 - 鉴于导弹的大小,即使您接触了其中一个 ,您也可以将其称为碰撞。 角色(将它们视为近程导弹,而不是那些具有冲击力的导弹)。

关于java - Java游戏中的碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2445166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com