我有感觉复古,并决定写我最喜欢的8位电脑游戏(威廉姆斯的后卫)在我的第一台电脑(准将PET 4032)。所有的代码都是用6502汇编语言编写的。对于那些不熟悉PET的人,所有的图形都是基于字符的,为了构建游戏,您可以在40列x25行屏幕上移动不同的字符。这是非常古老的技术-没有精灵,没有图形层,没有能力和在屏幕水平,等等,我们会习惯今天。
我希望游戏有多个“激光束”同时发射,而这些激光束可能在屏幕上相互覆盖。现在,当光束沿着屏幕移动时,它们会将它们存储在记忆中,然后在它们移动时替换它们下面的东西,以恢复背景的原始状态。问题出现在第一台激光器上的第二台激光器上。第一个移动,取代原来的背景,而不是留下第二个激光器在顶部,然后第二个激光移动,并留下第一个文物后。
是否有一个经典的“轻”算法或规则集,允许多个对象在彼此之间移动,从而保留原来的适当东西?我尝试过不同的方法(在事情发生时交换背景,等等),但似乎没有什么能给出我想要的正确结果。
发布于 2020-01-02 03:46:55
可以肯定的是,让每个精灵保留一份它覆盖的东西的副本,让它们按照与你画的顺序相反的顺序擦除。这不会失败,但它假设您有时间进行完整的精灵绘制和删除每一帧。
您还可以使用屏幕大小的缓冲区'is后台‘和'is sprite’标志。每次绘制精灵时,将其字符位置标记为“is”。若要擦除所有精灵,请在屏幕大小的缓冲区中迭代,在未标记为“是背景”的任何地方重新绘制背景。如果迭代整个2000潜在时隙的成本太高,则可以保持更新位置的上、下界。
您还可以比较两个这样的缓冲区之间的差异,以减少闪烁实质上假设您只有一个视频缓冲区:首先绘制新的精灵,无论他们应该去哪里,并注意到他们在新的缓冲区。一旦所有精灵都被绘制出来,在新缓冲区没有标记为“isn”的任何地方填入背景,但填上旧的是。
发布于 2020-01-05 17:01:55
我建议:
此过程避免因在单个框架中绘制任何绘图而引起的任何闪烁。
可以将各种索引结构添加到更改的单元掩码中,以避免不必要的绘图工作。在这里,什么样的优化是合适的取决于您的游戏。例如,如果背景基本上是静态的,那么在更新期间将每个更改的单元格的坐标添加到列表中是有用的,然后在背景重绘期间只检查这些单元格。或者你可以根据所有可移动元素的位置来做这件事。上两个你。
如果大多数场景在每帧中都有变化,那么您可以跳过掩码积累,只需从一个全屏幕掩码开始.虽然我认为PET可能不够快,这样的游戏。
发布于 2020-01-18 04:31:13
没有为宠物编程,我不能提供任何具体的建议,你可能会尝试,但我可以建议保留当前屏幕背景的副本在大约1k的RAM。这样,您可以在删除写入该瓷砖的最后一个"sprite“时使用该数据恢复背景。不幸的是,这也要求您将代码和对象数据组合在31k以下,除非您将其作为一个墨盒进行编程。只是一些想法,不管它们值多少钱。
https://stackoverflow.com/questions/59557212
复制相似问题