关于java:为什么魂斗罗只有128KB却可以实现那么长的剧情

39次阅读

共计 1453 个字符,预计需要花费 4 分钟才能阅读完成。

当代程序员 A 和 1980 年游戏程序员 B 的对话:

A:为什么你用 128KB 能实现这么多画面、音乐、动画?
B:128KB 还不够么?其实为了表现力曾经相当侈靡了,加了很多不重要的细节。
A:就说你们的音乐,这个音乐,我压到最低码率的 mp3,也得至多 1MB 吧。
B:你怎么压的?一首背景音乐怎么可能超过 1KB。
A:那你实现全屏卷轴,用了多少显存?
B:一共就只有 2KB 显存,多了也放不下啊。
A:……

1、咱们对“数据量”无奈直观意识

除非是专家,个别人根本无法估算到底多大算大,多小算小。

个别人对“数据量”并没什么概念。一篇 800 字的作文有多少数据量?依照 GBK 编码,约 1.6KB,依照 UTF- 8 编码,则是 2.4KB。

只写了 1 个字的作文,按理来说 1 字节~3 字节就够了。但只写 1 个字的 word 文档,有 10956 字节【汗】。
而因为硬盘格式化要求,再多占用 1332 字节【再汗】。

我就写了一个字,真的什么都没干

事实中常见的产品、风行的技术,实际上和时代背景密切相关。

当你抱着 15 寸笔记本还嫌小的时候,1990 年代初的家庭,可是一家人围着 14~18 寸的球面电视看的。把雪碧拿给古代人喝一口,预计他会齁得要死,必须喝点水压压惊。

当物质基础变得非常丰盛的时候,肯定会产生无奈防止的“节约”,这种“节约”会进一步扭转人感触的阈值,对度量的预计都变得错乱了。

2、FC(红白机) 时代的图形技术

因为晚期的记忆芯片(ROM)十分贵,而且大容量磁盘的技术也不成熟,所以暂且不管硬件计算能力,仅仅是想减少游戏的总容量也十分艰难。所以天然会应用合乎过后程度的数据结构。

以红白机 FC 为例,它的分辨率为 256×240。分辨率不算低,但却只有 2KB 显存,而且还要实现全屏卷轴成果。所以在 FC 设计之初,从硬件上就提供了充分利用显存的办法——应用 Tile(瓦片)。

对每一个场景来说,应用若干数量的瓦片,场景用无限的瓦片拼接即可。这种“二级”示意办法能极大节约存储量。


3、音频容量和代码容量

古代音乐格式往往间接保留声道的波形,这种做法保真度高、通用性强,但很显然占用空间多,一首曲子的容量以千字节、兆字节计算。

而八位芯片时代的音频解决方案,要害是一颗专用芯片,例如 FC 用的理光 2A03:

音频芯片能够产生合成音效,能提供的音色能够在肯定水平上配置,但十分无限。听听 FC 游戏的音乐能够领会到罕用的音色简直一样。我感觉这个音频芯片最厉害的中央是能够同时播放几个音轨(但不能是和弦那种“同时”),《魂斗罗》、《沙罗曼蛇》、《忍者龙剑传》的殿堂级音乐,次要是靠多个音轨的交替配合实现的。

每个音符只有记录音色、频率和音高就足够了,音频芯片天然会辨认进去。把音符按工夫排列好就是“乐谱”了,能够简略了解为“简谱”。这种简谱须要的数据量非常无限,而且大部分游戏音乐都是循环播放,数据量更是小的可怜。

代码也是相似的

FC 时代的游戏,没有所谓的“引擎层”,或者说引擎层就是“硬件层”。任天堂的主机齐全是为游戏而设计的,瓦片、调色板、音乐、音效等基本功能曾经事后思考到了,这样一来就节约了大量底层代码。

程序员要认真钻研文档,在硬件框架下思考问题,比方如何显示图片、如何卷动屏幕等等;而且还要十分相熟硬件底层和汇编,不要节约代码空间。一来二去,代码也能写的十分小。

总的来说,128KB 的游戏大作,在 30 年前稀松平时,放到当初几乎就是黑科技。科技的激烈改革带来技术指标非线性的变动,让咱们的记忆和直觉彻底掉队。

本文受权转载自知乎皮皮关 https://www.zhihu.com/questio…

正文完
 0