当前位置: 华文问答 > 游戏

FC 魂斗罗的背景为何都是黑色的、夜晚的感觉,是为了省内存么?

2017-07-27游戏

Boss战方面 @真把你打了 说得对,纯色背景是因为boss本身的图形也是用背景层实现的,一方面防止动起来露馅,一方面也是为了 节省Pattern Table容量 ,而后者也适用于boss战以外的各种画面。或者说,不是你省不省的问题,而是只有这么多东西可用。

FC的显存分配中,背景层Pattern Table只有128*128(2bit色),而整个屏幕输出分辨率是256*240。也就是说, 最多只能有大约1/4的背景面积由完全不重复的图形构成 。所以重复元素是必需的,你画成石头也好、树林也好、云彩也好,总之屏幕上一大半面积的图像都需要使用重复元素构成。

而最简单的重复,莫过于纯色显示了。只要在256个8*8的Pattern块当中留出1个纯色块,就可以复制平铺出大面积的画面。至于这个块的颜色到底是黑色还是什么其它颜色,只是色盘编号问题,运行起来性能是一样的,无所谓——马里奥的地上关背景就是蓝色。只是黑色更适用于大部分气氛比较成人的游戏。

甚至你这个块的图案内容也可以是任意8*8的4色图形,运行起来性能也是一样的。当然论美工效果还是纯色比较好看。例如我强行修改显存内容,用$1E的pattern替换$00之后,原本看上去很自然的夜空就变成了下图这种鬼畜的样子。

所以很多游戏选择纯黑背景的理由说来很简单,只是 在机能限制下追求尽可能美观的画面

顺便说一下,如果你想知道屏幕上哪些东西是背景、哪些是活动块,没必要跳起来一帧一帧截图做实验。FCEUX这样的模拟器debug功能很强大,背景层和活动块层可以分别选择显示或屏蔽,而且你可以实时查看显存内容。如图:魂斗罗1当中的炮台就是不折不扣的背景。

——————————

关于FC画面渲染机理,请阅读PPU rendering - Nesdev wiki或者我之前的一篇答案。

关于水平切割优化等「伪多卷轴」效果的实现,请阅读FC游戏的伪多卷轴。