在太空入侵者中,当外星人的子弹击中你的防御基地时,它们会慢慢恶化。有人能解释一下游戏是怎么做到的吗?
我猜他们没有使用图像作为基础,也没有使用边界矩形碰撞检测?
发布于 2017-03-04 02:41:45
拨打返回机。最初的太空入侵者使用一个简单的比特掩码来增加基地的伤害。这些图像只是基本的1位图像,从内存1字节宽到8字节(8x8像素)
为了应用损坏,有一个掩码0b11111001,0b11110000被左移(进位放在最低位),然后用基字节进行掩码。pixelByte &= maskByte。然后剪掉损坏的图案。如果炸弹的路径上还有剩余的像素,炸弹就会继续击中基地。
为了检测一个基地命中,还使用了一个掩码。bombMask = 0b00000011向左移动(或可能已被查找)以匹配x位置。要查看是否有命中,只需使用基数位的掩码pixelByte & bombMask,如果结果不为零,则表示命中了基数。
它都是用汇编语言编写的,在当时是一部编程杰作。我仍然记得我在想,“他们怎么能这么快地移动这么多像素。”
今天,您可以使用相同的方法,但您很少看到如此多的精力投入到细节中。我发现现代游戏倾向于走捷径,只有一组图像来显示损坏。
因此,只需使用伤害计数,基于命中框或圆圈,显示图像来说明伤害状态、健康、轻微伤害、重大伤害和破坏。易于实现!对游戏有好处吗?好吧,这完全是另一回事。
发布于 2017-03-02 14:09:18
我不是很确定它最初是怎么做的,但一种方法是让每个屏障由许多单独的块组成,每个块都有自己的健康值。如果某个块的命中率足够高,则将其删除。
这应该允许壁垒逐渐恶化。
编辑:为了清楚起见,你可以让每个障碍物由许多独立的图像组成(我相信它们在原始图像中只是一个平面颜色),并且每个图像都有一个矩形,投射物可以与之碰撞,破坏了障碍物的这一部分。
发布于 2017-03-09 13:36:39
在最初的太空入侵者中,任何时候屏幕上的入侵者炸弹都不超过3枚,所以简单的矩形碰撞是可以的。
我这样做的方式是从具有id的单个块/像素创建基础。当炸弹击中基地时,我通过一个反向循环得到第一个像素的id,这个循环在那个点上中断。
从这个像素开始,我计算了一些大致呈爆炸形状的向上、向下、向左和向右的像素,并去掉了这些基本像素,在底部留下了一个很好的凹痕。
雷射炮在基地发射时也采用了同样的方法。
不幸的是,我不能张贴游戏代码,因为它超过了最大字符张贴限制。我在Codepen上有游戏,但我不允许在没有一些代码的情况下发布链接,这太大了,如上所述!
但是,如果你去Codepen搜索太空入侵者,它会在第一页显示为‘太空入侵者Taito 1978’。
https://stackoverflow.com/questions/42547912
复制相似问题