太空入侵者的基础恶化

时间:2017-03-02 06:01:07

标签: collision-detection 2d-games

在太空入侵者中,当外星子弹击中你的防御基地时,它们会慢慢恶化。任何人都可以解释游戏是如何做到的吗?

我猜他们没有使用图像作为基础,也没有限制矩形碰撞检测?

3 个答案:

答案 0 :(得分:1)

我不确定它最初是如何完成的,但是让它工作的一种方法是让每个屏障由多个独立的块组成,每个块都有自己的健康值。如果一个块有足够的命中,请删除它。

这应该允许障碍逐渐恶化。

编辑:为了澄清,你会让每个屏障由许多单独的图像组成(我相信它们只是原始的平面颜色),并且每个图像都有一个矩形,射弹可能会碰撞,损坏该部分屏障。

答案 1 :(得分:1)

在返回机器中拨号。原始的太空入侵者使用一个简单的位掩码来增加对基地的伤害。图像只是基本的1位图像,从1字节宽的存储器和8字节的8字节(8×8像素)

为了应用损坏,有一个向左移位的掩码[0b11111001,0b11110000](进位位于最低位)然后用基本字节屏蔽。 pixelByte &= maskByte。然后切出损坏的模式。如果剩下任何像素并且在炸弹的路径上,炸弹将继续击中基地。

为了检测基础命中,还使用了掩模。 bombMask = 0b00000011向左移动(或者可能已被抬起)以匹配x pos。如果结果不为零,那么为了查看是否存在命中,只有掩码和基本位pixelByte & bombMask,那么基数已被命中。

这一切都是用大会写的,而且它的时间是编程大师。我仍然记得,“他们怎么能这么快地移动这么多像素。”

今天你可以使用相同的方法,但你很少看到这样的细节。我发现现代游戏往往采取捷径,只是有很多图像来显示损坏。

所以,只需根据一个命中框或圆圈,显示图像,以说明伤害状态,健康,轻微伤害,重大伤害和摧毁。易于实施!对比赛有好处吗?这完全是另一回事。

答案 2 :(得分:0)

在原始太空入侵者中,任何时候屏幕上都不会有超过3个入侵者炸弹,因此简单的矩形碰撞就可以了。

我这样做的方法是从具有id的各个块/像素创建基础。当炸弹击中基座时,我通过一个在此时断开的反向环路获得第一个像素的id。

从那个像素开始,我大致以爆炸的形状向上,向下,向左和向右计数了一些像素,并移除了那些基本像素,在基座上留下了很好的凹痕。

同样的方法用于在基地射击的激光炮。

不幸的是,我无法发布游戏代码,因为它超出了最大字符发布限制。我在Codepen上玩游戏但是我不允许在没有上述代码太大的情况下发布链接!

但是,如果你去Codepen并搜索太空入侵者,它会在第一页上显示为'Space Invaders Taito 1978'