当前位置: 首页 > 后端技术 > Java

为什么魂斗罗只有128KB就能有这么长的剧情?

时间:2023-04-01 18:10:02 Java

1980年当代程序员A与游戏程序员B的对话:A:你为什么用128KB就可以实现这么多图片、音乐、动画?B:128KB不够吗?其实为了表现力,已经很奢侈了,加了很多不重要的细节。A:谈谈你的音乐吧。对于这首音乐,我压缩到最低码率的mp3至少要有1MB。B:你是怎么按的?一段背景音乐怎么可能超过1KB。A:你用了多少显存来实现全屏滚动?B:显存总共只有2KB,没有空间了。A:……1、我们不能直观的理解“数据量”。除非你是专家,否则一般人是无法估计多大才算大,多大才算小。大多数人没有“数据量”的概念。一篇800字的文章有多少数据?按照GBK编码约为1.6KB,按照UTF-8编码约为2.4KB。我只写了一个字的作文,所以1-3个字节应该就足够了。但是一个只写1个word的word文档有10956字节[汗]。而且由于硬盘格式化的要求,多占用了1332字节[再汗]。我只是写了一个字,我真的什么也没做。现实中常见的产品、流行的技术,其实都与时代背景息息相关。当你拿着15英寸的笔记本太小的时候,90年代初期的家庭围观14-18英寸的球形电视。给古人喝一口雪碧,估计会死,必须要喝点水,才能压抑住震惊。当物质基础变得非常丰富时,不可避免地会出现“浪费”,这会进一步改变人们的感情门槛,衡量的估计也会变得无序。2.FC(红白电脑)时代的图形技术,因为早期的内存芯片(ROM)非常昂贵,大容量磁盘的技术还不成熟,所以不管硬件计算能力如何,都是很难仅仅增加游戏的总容量。困难。所以自然要用符合当时水平的数据结构。以红白机FC为例,其分辨率为256x240。分辨率不低,而且显存只有2KB,还能实现全屏滚动效果。因此在FC设计之初,就从硬件使用Tile(tile)提供了一种充分利用显存的方法。对于每个场景,使用一定数量的瓦片,场景可以用有限的瓦片进行拼接。这种“两级”表示可以大大节省存储容量。3、音频容量和编码容量现代音乐格式往往直接保存声道的波形。这种方法保真度高,通用性强,但显然占用了很大的篇幅。歌曲的容量以千字节或兆字节为单位。计算。八位芯片时代音频解决方案的关键是专用芯片,比如FC的理光2A03:音频芯片可以产生合成音效,提供的音色可以进行一定程度的配置,但是非常有限。听FC游戏的音乐,能感觉到常用的音色都差不多。我认为这个音频芯片最强大的部分是它可以同时播放多个音轨(但不像和弦那样“同时”播放)。实现了音轨的交替协调。记录下每个音符的音色、频率和音调就足够了,音频芯片会自然识别。按时间排列音符就是“乐谱”,可以简单理解为“简谱”。这种简谱需要的数据量非常有限,而且大部分游戏音乐都是循环播放的,所以数据量更是少得可怜。代码也类似于FC时代的游戏,没有所谓的“引擎层”,或者说引擎层就是“硬件层”。任天堂的主机完全是为游戏而设计的,瓦片、调色板、音乐、音效等基本功能都已经提前考虑好了,省去了很多底层代码。程序员要认真研究文档,思考硬件框架下的问题,比如如何显示图片,如何滚动屏幕等;并且他们必须非常熟悉底层硬件和装配,以免浪费代码空间。一来二去,代码也可以写得很小了。总的来说,128KB的游戏大作在30年前是家常便饭,现在简直就是黑科技。技术的剧变带来了技术指标的非线性变化,让我们的记忆和直觉完全落伍了。本文经授权转载自知乎皮皮关https://www.zhihu.com/questio...