本文是我的书《 Bug Voyage:经典游戏故障之旅》的一部分。 该书还包含有关生成伪随机数,使用二进制和十进制数执行低级计算的信息,以及有关如何在任何Galaga机器上造成故障(甚至不丢硬币)的信息。如果您附近有吃豆人街机,女士。 吃豆人或类似的东西,你很幸运,今天他们供不应求。 甚至是过去非常常见的“ 20年团圆”机器,女士们都安装在其中 吃豆人和加拉加现在不那么普遍了。
但是,为了了解将要讨论的内容,足够从YouTube下载有关这些游戏之一的视频并在短短一分钟内观看:
你注意到了吗? 吃豆人和鬼魂如何在迷宫中顺畅移动? 他们如此自信而清晰地滑行。
我们将看到,这种流动性只是一种幻想,而还不是全部。 这是另一个YouTube视频:
它是由
《吃豆人文档》文章的作者Jamey Pittman上传的,该文章是我书中许多《吃豆人》信息的来源。 倒带了一些视频,以节省您的时间。 看一看。 特别要注意“吃豆人”和红色鬼魂(手册中说他的名字叫“眨眼”)。 注意大约四十秒后会发生什么!
你看到了吗 吃豆人毫无问题地穿过了红色的幽灵! 这是怎么发生的? 是否可以确保这种情况一直发生?
冷静点,现在我将解释所有事情,是的,这是一种持续的行为。 如果您完全按照皮特曼的指示进行操作,那么这种情况将永远存在。
吃豆人什么是精灵?
二维图形设备的一部分在游戏中使用了特殊的图形对象,称为子画面。 您可能在有关字符像素图形的现代对话中听到了这个术语。
但是在此之前,该术语的含义是不同的:它表示一个独立移动的图形对象,可以将其放置在屏幕上的任何位置,或放置在其余图形的顶部(称为背景)或下方。 给精灵指定X和Y坐标,图像及其颜色。 通常,它们被用作游戏角色,但也被用作背景的补充和其他目的。
大多数系统支持多个或(对于Galaga而言)许多精灵。 它们有其他名称:Atari首先将它们称为“ Player-Missile Graphics”,在早期的Commodore文档中,它们被称为“可移动对象块”(MOB)。 但是,逐渐地,几乎每个人都开始将它们称为“精灵”。
设备街机Pac-Man支持Sprite图形。 它一次最多可以在屏幕上显示八个子画面,而无需在扫描线上使用技巧。 精灵之一是吃豆人本人的形象,另外还有四只被鬼魂使用。 吃豆人吃掉幽灵时,他的眼睛回到幽灵精灵身上。
并非屏幕上所有更改的内容都是精灵。 当时设备使用的另一种图形类型是图块
背景 。 它只是存储在内存中的单个图形元素的网格。 更改存储位置的内容时,屏幕的一小部分对应于网格的这一部分也会立即更改。 因此,使用这些网格很简单。
吃豆人游戏中的点是背景的图块(平铺),当吃豆人吃掉它们时将其删除。 通过给这些单元格上黑,然后每隔几帧涂上白色,就可以增强Energizer的闪烁效果,从而增强了吃豆人的力量。 但是这些对象不会移动,只能将其删除或替换。
字符图块图形的问题在于它无法平滑移动。 它位于网格上,因此移动的背景对象将无法像吃豆人和幽灵一样在屏幕上顺畅移动。 它只能在网格单元之间移动。 不可能移动部分网格空间;它是否存在或不存在。
是的,这很有趣。 但是那又怎样呢?
吃豆人世界的基础
小时候,我为Commodore 64用Microsoft BASIC编写了一些小型游戏。这种BASIC的实现存在问题。 程序执行缓慢,几乎从未使用过计算机的声音和图形资源,这对于他们的时间来说是惊人的。 如果您想对图形和声音进行处理,则必须学习称为POKE的隐秘技术直接内存访问命令,或者学习编写机器代码。
一种解决方案是使用字符对象而不是精灵系统图形,如上所述。 对象可以像瓷砖一样跳跃,但是使用起来要容易得多。 可以开始使用角色图形来创建游戏,然后,当项目变得非常庞大且严肃时,我想向人们展示该游戏时,请改用硬件精灵。
内存中的对象仍可以以8个像素的相同增量跳过,但播放器看不到。 他所看到的只是一个闪烁的精灵图像,该图像可能比角色图块大,并且隐藏了实际发生的事情。 明智地进行编程,可以对子画面的位置进行插值,以使其运动看起来更平滑。 如果您做得足够好,那么玩家永远不会注意到差异。 只有你会知道真相。
您一定已经猜到了我的目标。 因为这
是吃豆人的编程方式 。
实际上,《吃豆人》和《幽灵》都有两个位置。 这是精灵图像在播放器看到的屏幕上平滑移动的位置。 这样的信息会在玩家玩游戏时提供给玩家,但这只是一个影子,一种幻觉。 如果您想了解吃豆人的实际运作方式,则需要更深入地了解。
在游戏的幕后,《吃豆人》还考虑了哪些角色单元格被《吃豆人》和《幽灵》占据。 屏幕上没有这些坐标的痕迹。 我怀疑在《吃豆人》的早期阶段,在尝试游戏玩法时,开发人员可以在屏幕上直接绘制图块。 杰米·皮特曼(Jamie Pittman)发现这些坐标用于所有鬼魂的人工智能,并且还用于识别游戏中的所有碰撞。
为了维持这种幻觉,游戏必须花样技巧。 她跟踪吃豆人和幽灵在订户级别上从当前单元移动了多远,并在距离足够远时将它们切换到新位置。 稍快一点的物体将具有使换格频率更高的速度。
这些元素-网格坐标,在单元之间的跟踪以及屏幕上精灵的位置-产生了平滑运动的错觉。 但是从游戏的角度来看,移动的方式与我在Commodore 64上编写角色的单元格图形时完全相同。
推算
现在,我们拥有您所需的所有信息,以了解吃豆人如何穿越幽灵。
通过将吃豆人碰撞的网格坐标与幻影坐标进行比较,可以识别出吃豆人碰撞。 如果它们相同,则发生碰撞,一个碰撞另一个。 如果它们不同,则不会发生冲突。 仅此而已,仅此而已。
您可以看到做出此决定的原因是处理器周期中冲突识别的速度。 在每一帧中,他将“吃豆人”角色的数字X和Y与四个幽灵中每个幽灵的数字进行比较。 因此,他无需担心距离和危险情况。 碰撞是网格系统中坐标的精确匹配。
该网格(大约)对应于表示游戏角色真实位置的图块坐标系。 碰撞检测使用此网格。 仅当两个角色的图块的坐标重合时,游戏才会记录碰撞。 这意味着它们必须占用一个网格单元。当“吃豆人”和“鬼魂”彼此靠近的位置切换到同一帧中的下一个单元格时,就会出现问题。 在所有对象都在当前帧中移动后,才执行冲突检查。 如果Pac-Man转到Blinky单元,并且Blinky转到同一帧中的前一个Pac-Man单元,则在检测到冲突时会发生错误。 他们换了地方!
由于这是在游戏中真正意味着某种意义的唯一现实水平,因此玩家
看到的内容并不重要。 吃豆人和鬼魂正好穿过,“像海里的船一样散开”。
游戏中的人工智能(AI)具有确定性,因此您可以确定行为重复的模式。 尽管事实表明通过错误的时间必须精确到帧,但如果
玩家遵循执行吃豆人运动模式的规则,则不必精确到帧。 这就是Jamie Pittman的视频的录制方式。
我进行了如此详细的说明,以强调一个重要的事实。 将游戏中的物体视为真实物体非常容易。 吃豆人就是屏幕上的
一个物体 ,鬼魂也是一个物体,例如太空船,马里奥,音速,实心蛇,使命召唤的士兵。 它们都是对象。 但这是一种幻想。
实际上,它们都只是给您一些内部更深入的系统的提示。 在此系统中,计算机必须做大量工作才能确定两个物体
相互接触 。 您在屏幕上看到的是抽象世界的插图,游戏的一部分通过屏幕以适合他的真实感的方式向玩家传输了来自这个世界的信息。
很容易忘记此连接有多薄。 您如何知道您在屏幕上控制的对象? 他与他人不同,对管理做出回应。 但是,如果屏幕上出现完全相同的内容怎么办? 还是您的对象有时会随机移动,延迟响应控制信号,有时会变得不可见,一分为二而变成敌人之一?
设计师的任务是使游戏的内部世界与您在屏幕上看到的内容之间的联系尽可能简单和直接(当然,如果他不打算实现某些特殊效果)。 这就是
浸入的意思,或应该的意思。
附加信息
将硬币插入“ 20年团圆”街机中,并使用第一个玩家的操纵杆进入:上,上,上,下,下,下,左,右,左,右,左。 如果“游戏选择”屏幕上的幻影变成粉红色,并且您听到声音,则说明一切正确。 现在,如果您选择游戏Ms. 吃豆人,那么您将改为播放原始吃豆人。
在某些图形硬件上,可以将技巧与扫描线配合使用来创建强大的魔术。 例如,在仅显示八个Sprite的系统中,尽管以处理器时间和灵活性降低为代价,但可以实现更多功能。
在这方面,Atari VCS / 2600控制台最值得一提,因为那里的大多数系统图形都是使用带有扫描线的技巧创建的。 在《
赛车光束 》一书中了解有关这些技术的更多信息。
资料来源:
吃豆人上的档案: http ://www.gamasutra.com/view/feature/3938/the_pacman_dossier.php?print =1
杰米·皮特曼(Jamie Pittman)的YouTube频道: https : //www.youtube.com/user/jameypittman/videos