【发布时间】:2020-01-02 00:29:13
【问题描述】:
我感觉很复古,并决定在我的第一台计算机 (Commodore PET 4032) 上编写我最喜欢的 8 位计算机游戏 (Williams' Defender)。所有代码都是用 6502 汇编语言完成的。对于那些不熟悉 PET 的人来说,所有的图形都是基于角色的,要构建游戏,您可以在 40 列 x 25 行的屏幕上移动不同的角色。这是一项非常古老的技术——没有精灵,没有图形层,没有我们今天习惯的屏幕级别的 AND 功能等。
我希望游戏同时发射多个“激光束”,这些激光束在穿过屏幕时可能会相互叠加。现在,当光束沿着屏幕移动时,它们会将自身下方的内容存储在内存中,然后在它们移动时替换自身下方的内容,以将背景恢复到原始状态。当第二个激光器在第一个激光器的顶部移动时,问题就出现了。第一个激光器移动并替换原始背景,而不是将第二个激光器留在顶部,然后第二个激光器移动并留下第一个激光器的伪影。
是否有一种经典的“轻量级”算法或规则集允许多个对象相互移动,从而保留下面的原始正确事物?我尝试了不同的方法(在事物遍历时交换背景等),但似乎没有什么能给我想要的正确结果。
【问题讨论】:
-
在gaming.stackexchange 上提问可能会更好。在 stackoverflow 上通常不允许对软件库的建议提出问题(我相信,部分原因是它们随着技术的进步和创建意见驱动的对话而变化如此之快)请提供minimal reproducible example 并仔细检查How to Ask跨度>
-
如果您始终以正确的顺序绘制和取消绘制所有对象,您的方法将奏效。很多游戏都是这样做的。另一种经常使用的技术是将对象异或(异或)到屏幕上,然后再次对它们进行异或以取消绘制,但这可能效果不佳,具体取决于您的分辨率和颜色映射 - 它最适合黑白。否则汤米关于重绘背景的其他建议将是标准方法。