百科问答小站 logo
百科问答小站 font logo



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

  

user avatar   thinkraft 网友的相关建议: 
      

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游戏的伪多卷轴


user avatar   zhen-ba-ni-da-liao 网友的相关建议: 
      

此答案已经高清重置,请移步

以下是原答案

四更了


补充一下平机王作者的答案。

fc游戏的画面组成,简单来说就是1个背景层+64个8*8像素的活动块。

找了张超级魂斗罗的图(小时候穷,家里没有魂斗罗,只有超级魂斗罗,打过无数遍)。


大家可以看到,这个直升机boss,如果单纯用活动块来组成,那么,64个活动块是远远不够的!

所以,聪明的制作人想出了一个奇技淫巧,就是用背景层来做boss。

因为这是背景层,并且fc只支持一层背景,只要它移动,就是整个画面都在移动,所以只能用纯色的背景,不然就露馅了。比如说,如果画面上多了一个月亮,那么,直升机在动,月亮也会跟着直升机一起动。

而且,黑色又是看起来最“正常”的颜色(可以强行解释成夜晚),所以fc大部分巨大boss都是晚上打的。

当然,也不一定要黑色,比如


你们以为自己打的是敌人?其实打的是背景。



补充
本来只是想补充一下平机王作者的答案,没想到大家都赞我了,那就再补充点内容吧。

大家看这2张图


这张图是有背景的,就是天上那些云(其实严格来说,地面 楼房 云都是背景)

然后走过这个房子之后


背景就变成纯黑的了

这就是为了用背景绘制boss,把背景的其他东西都去掉了

然后,打完boss之后


果然,云又回来了……

另一个关键点是,fc活动块是64个,但是同行活动块最多8个,如果同行超过8个,就会出现闪烁现象。

也就是说宁可让一些活动块消失,也要让同行活动块控制在8个以内。

再回到这个图


可以很直观地看出,这些小兵,由于超过同行活动块的限制,产生闪烁,变得残缺不全。

再回到这关的直升机boss

之前说过,boss是背景,但是boss身上的组件有可能是活动块,比如说boss身上的炮管。

那就测试一下吧

看准,起跳,截图

成果如下


没有闪烁!没有闪烁!

炮管如果是活动块组成,一个活动块的像素是8*8,那么一个炮管至少要2*2个活动块叠加,人物也要2*2个活动块,再加上爆炸产生的那个冲击波,同一行至少要12个活动块,远超过了同行8个的限制,肯定是会产生闪烁的。

所以,直升机就是100%背景构成的。


有位网友 @Winston qiu 说,为什么会产生闪烁现象,在这就稍微说一下。

我们先来个找茬游戏。





无奖竞猜,大家能找出3张图有几个区别?

前面说过,宁可让活动块消失,也要使同行活动块控制在8个。

但是,总不能让同一个活动块消失,不然敌人都隐形了,那怎么玩?(而且第一张图是让子弹消失,那就要命了,怎么死的都不知道)

那怎么办?轮流来呗。

fc的画面是每秒60帧,这一帧让这几个活动块消失,下一帧让那几个活动块消失,谁也不吃亏。
你消失一下,我消失一下,看起来就是闪烁的感觉了。



不要问我为什么主角颜色那么奇怪,我会告诉你我用触摸屏玩不开无敌根本打不到关底吗?



再次补充

评论区有个眼尖的网友 @Trueng Charlie 看出问题来了,如果直升机和地面都是同一层背景的话,为何两者会相对位移?

我真的只是想补充一下 @平机王作者 的答案而已,但是,看大家这么热情啊,我一句话不说也不好……

其实这个是用了水平切割原理, @Thinkraft 的一篇文章写的很详细了,我就通俗地说一下吧。

fc画面是一行一行地输出的,但是输出的时候可以把这些行给错开,造成相对位移的现象。

fc上很多游戏都用了这个方法造成N多层卷轴的假象,比如忍者龙剑传系列。


比如忍者龙剑传2的这张图,草地 火车 森林 远山都是相对移动的,4重卷轴,厉不厉害?达到了sfc的水准。

这就是水平切割的威力。

群众:明明说相对位移,你放一张静态图,搞毛线啊?

没错,静态图看不出什么东西。
但是,再看一组忍者龙剑传的图就明白了。

相对冷门的一款GB上的《忍者龙剑传 决战摩天楼》




大家可以明白了吧,这就是隼龙如何切割bos……呸,水平切割如何切割boss的。

很惭愧,明明说的是fc,结果用了GB,因为fc上实在想不出更好的例子了,如果大家能想到的话,请告诉我。

ps:求赞求关注啊~

ps2:很惭愧,水平不足,只能说一些浅显的东西,如果大家想对fc的原理有更深入的了解,请移步本问题下 @Thinkraft 的答案

ps3:居然上日报了~




  

相关话题

  为什么当年 FC 的硬件那么容易就被山寨? 
  历史上有哪些经典游戏? 
  玩《重装机兵》什么时候最爽? 
  《魂斗罗》的剧情讲述了一个什么故事? 
  FC 游戏《中国象棋》中,困难难度是真的在计算棋谱吗? 
  KONAMI 的《魂斗罗》(Contra)中角色为什么要「萝莉式屈腿俯卧」? 
  FC 魂斗罗的背景为何都是黑色的、夜晚的感觉,是为了省内存么? 
  为什么魂斗罗只有128KB却可以实现那么长的剧情? 
  如何评价敖厂长在最新一期“囧的呼唤”中发现“水下八关”? 
  为什么当年 FC 的硬件那么容易就被山寨? 

前一个讨论
为什么同样的发动机421排气歧管比41排气歧管高转速输出动力高?
下一个讨论
全新奥迪a6上12v轻混是什么鬼?不升级电池也能做轻混么?





© 2024-05-14 - tinynew.org. All Rights Reserved.
© 2024-05-14 - tinynew.org. 保留所有权利