Space入侵者基地恶化
Space invaders base deterioration
在space入侵者中,当一颗外星子弹击中你的防御基地时,它们会慢慢恶化。任何人都可以解释游戏如何做到这一点?
我猜他们没有使用图像作为基础,也没有使用边界矩形碰撞检测?
我不太确定它最初是如何完成的,但让它发挥作用的一种方法是让每个屏障都由许多单独的块组成,每个块都有自己的生命值。如果一个块受到足够的点击,将其删除。
这应该允许屏障逐渐恶化。
编辑:为了澄清,你会让每个障碍物由许多单独的图像组成(我相信它们在原始图像中只是一种单一的颜色),并且每个图像都有一个矩形,射弹可能会与之碰撞,造成损坏障碍物的那部分。
正在拨入回程机。最初的 space 入侵者使用一个简单的位掩码来增加对基地的伤害。这些图像只是基本的 1 位图像,来自内存 1 字节宽和 8 字节向下(8 x 8 像素)
要应用损坏,有一个掩码 [0b11111001,0b11110000] 向左移动(进位放在最低位)然后用基本字节掩码。 pixelByte &= maskByte
。然后剪掉损坏的图案。如果在炸弹的路径上还有剩余的像素,炸弹将继续击中基地。
为了检测碱基命中率,还使用了掩码。 bombMask = 0b00000011 向左移动(或者可以被查找)以匹配 x 位置。要查看是否命中,您只需将掩码与基位 pixelByte & bombMask
相结合,如果结果不为零,则基数已被命中。
它全部用汇编语言编写,在当时堪称编程杰作。我还记得在想,"How can they move so many pixels so quickly."
今天你可以使用同样的方法,但你很少看到像这样在细节上付出如此多的努力。我发现现代游戏倾向于走捷径,只设置大量图像来显示损坏。
因此,只需根据命中框或圆圈计算伤害计数,显示图像来说明伤害状态、健康、轻微伤害、重大伤害和被摧毁。易于实施!对比赛有好处吗?好吧,那完全是另一回事。
在最初的space入侵者中,任何时候屏幕上的入侵者炸弹都不会超过3个,所以简单的矩形碰撞就可以了。
我这样做的方法是从具有 id 的个人 blocks/pixels 创建基地。当炸弹击中基地时,我通过一个在该点中断的反向循环获得第一个像素的 ID。
从那个像素开始,我计算了大致呈爆炸形状的上下左右像素数,并移除了那些基本像素,在底部留下了一个漂亮的凹痕。
基地上的激光炮也是同样的方法
不幸的是,我无法 post 游戏代码,因为它超过了最大字符数 posting 限制。我在 Codepen 上有游戏,但我不允许 post a link 没有一些代码太大,如上所述!
但是,如果您去 Codepen 搜索 space 入侵者,它会在第一页上显示为 'Space Invaders Taito 1978'
在space入侵者中,当一颗外星子弹击中你的防御基地时,它们会慢慢恶化。任何人都可以解释游戏如何做到这一点?
我猜他们没有使用图像作为基础,也没有使用边界矩形碰撞检测?
我不太确定它最初是如何完成的,但让它发挥作用的一种方法是让每个屏障都由许多单独的块组成,每个块都有自己的生命值。如果一个块受到足够的点击,将其删除。
这应该允许屏障逐渐恶化。
编辑:为了澄清,你会让每个障碍物由许多单独的图像组成(我相信它们在原始图像中只是一种单一的颜色),并且每个图像都有一个矩形,射弹可能会与之碰撞,造成损坏障碍物的那部分。
正在拨入回程机。最初的 space 入侵者使用一个简单的位掩码来增加对基地的伤害。这些图像只是基本的 1 位图像,来自内存 1 字节宽和 8 字节向下(8 x 8 像素)
要应用损坏,有一个掩码 [0b11111001,0b11110000] 向左移动(进位放在最低位)然后用基本字节掩码。 pixelByte &= maskByte
。然后剪掉损坏的图案。如果在炸弹的路径上还有剩余的像素,炸弹将继续击中基地。
为了检测碱基命中率,还使用了掩码。 bombMask = 0b00000011 向左移动(或者可以被查找)以匹配 x 位置。要查看是否命中,您只需将掩码与基位 pixelByte & bombMask
相结合,如果结果不为零,则基数已被命中。
它全部用汇编语言编写,在当时堪称编程杰作。我还记得在想,"How can they move so many pixels so quickly."
今天你可以使用同样的方法,但你很少看到像这样在细节上付出如此多的努力。我发现现代游戏倾向于走捷径,只设置大量图像来显示损坏。
因此,只需根据命中框或圆圈计算伤害计数,显示图像来说明伤害状态、健康、轻微伤害、重大伤害和被摧毁。易于实施!对比赛有好处吗?好吧,那完全是另一回事。
在最初的space入侵者中,任何时候屏幕上的入侵者炸弹都不会超过3个,所以简单的矩形碰撞就可以了。
我这样做的方法是从具有 id 的个人 blocks/pixels 创建基地。当炸弹击中基地时,我通过一个在该点中断的反向循环获得第一个像素的 ID。
从那个像素开始,我计算了大致呈爆炸形状的上下左右像素数,并移除了那些基本像素,在底部留下了一个漂亮的凹痕。
基地上的激光炮也是同样的方法
不幸的是,我无法 post 游戏代码,因为它超过了最大字符数 posting 限制。我在 Codepen 上有游戏,但我不允许 post a link 没有一些代码太大,如上所述!
但是,如果您去 Codepen 搜索 space 入侵者,它会在第一页上显示为 'Space Invaders Taito 1978'