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

这篇具有很好参考价值的文章主要介绍了为什么魂斗罗只有 128KB 却可以实现那么长的剧情。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       经常看到有同学在抱怨现在的游戏、APP占用非常大的空间,基本都是 10G 起步。

这让我想到初中时玩过的一款游戏魂斗罗,为什么它只有 128KB 却可以实现那么长的剧情呢?这篇文章将会给大家讲讲这里面的奥秘~


正文

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

 

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

A:为什么你用 128KB 能实现这么多画面、音乐、动画?

B128KB 还不够么?其实为了表现力已经相当奢侈了,加了很多不重要的细节。

A:就说你们的音乐,这个音乐,我压到最低码率的 mp3,也得至少 1MB 吧。

B:你怎么压的?一首背景音乐怎么可能超过 1KB

A:那你实现全屏卷轴,用了多少显存?

B:一共就只有 2KB 显存,多了也放不下啊。

A……

我们对“数据量”无法直观认识

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

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

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

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

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

 

当物质基础变得十分丰富的时候,一定会产生无法避免的浪费,这种浪费会进一步改变人感受的阈值,对度量的估计都变得紊乱了。

FC 时代的图形技术

由于早期的记忆芯片(ROM)非常贵,而且大容量磁盘的技术也不成熟,所以暂且不论硬件计算能力,仅仅是想增加游戏的总容量也非常困难。所以自然会使用符合当时水平的数据结构。

以红白机 FC 为例,它的分辨率为 256x240。分辨率不算低,但却只有 2KB 显存,而且还要实现全屏卷轴效果。

所以在 FC 设计之初,从硬件上就提供了充分利用显存的方法——使用 Tile(瓦片)。

对每一个场景来说,使用若干数量的瓦片,场景用有限的瓦片拼接即可。这种二级表示方法能极大节约存储量。

具体一些原理讲解可以看一些科普,比如这个:

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

 

音频容量和代码容量

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

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

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

 

音频芯片可以产生合成音效,能提供的音色可以在一定程度上配置,但非常有限。听听 FC 游戏的音乐可以体会到常用的音色几乎一样。

我觉得这个音频芯片最厉害的地方是可以同时播放几个音轨(但不能是和弦那种同时),《魂斗罗》、《沙罗曼蛇》、《忍者龙剑传》的殿堂级音乐,主要是靠多个音轨的交替配合实现的。

每个音符只要记录音色、频率和音高就足够了,音频芯片自然会识别出来。把音符按时间排列好就是乐谱了,可以简单理解为简谱

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

 

这种简谱需要的数据量十分有限,而且大部分游戏音乐都是循环播放,数据量更是小的可怜。

代码也是类似的

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

程序员要仔细研究文档,在硬件框架下思考问题,比如如何显示图片、如何卷动屏幕等等;而且还要非常熟悉硬件底层和汇编,不要浪费代码空间。

一来二去,代码也能写的非常小。

总的来说,128KB 的游戏大作,在 30 年前稀松平常,放到现在简直就是黑科技。

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

 

科技的剧烈变革带来技术指标非线性的变化,让我们的记忆和直觉彻底落伍

< END >文章来源地址https://www.toymoban.com/news/detail-467385.html

到了这里,关于为什么魂斗罗只有 128KB 却可以实现那么长的剧情的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习 Python 之 Pygame 开发魂斗罗(十六)

    在上次的博客学习 Python 之 Pygame 开发魂斗罗(十五)中,我们加入了boss,至此,魂斗罗的主体部分已经完成了,接下来就是在其他地方加入一点敌人,设置进场动画,胜利动画,失败动画和音效了,在这篇博客中,我们加入音效和加入进场动画。 下面是图片的素材和源码,

    2024年02月05日
    浏览(55)
  • 所以说为什么面试两百家到手offer却只有个位数

    一直以来,我面试过快两百家公司了,拿到手的offer不超过10个手指头。  我总是会在面不上的时候,在群里发牢骚,为什么自己要做无用功,为什么面试官问的问题那么简单我答不上来,为什么问我我不熟悉的地方,为什么针对我。        首先自从我培训出来到现在有两

    2024年01月21日
    浏览(42)
  • 为什么说安卓系统会比iOS系统更安全?_安卓安全性优势,你会的还只有初级工程师的技术吗

    😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓 👉CSDN大礼包🎁:全网最全《网络安全入门进阶学习资源包》免费分享**(安全链接,放心点击)**👈 ​ 对于从来没有接触过网络安全的同学,我们帮你准备了详细的 学习成长路线图 。可以说

    2024年04月23日
    浏览(38)
  • Netty为什么高效,为什么这么受欢迎?

    上篇文章通过 Java NIO 的处理流程与 Netty 的总体流程比较,并结合 Netty 的源码,可以更加清晰地理解Netty。本文将结合源码详细解析Netty的高效和强大功能的设计原理,学习 Netty 是如何实现其卓越的性能和功能特性,也希望可以在日后工作中利用到 Netty 的设计思想。 我们先看

    2024年02月12日
    浏览(69)
  • Redis—Redis介绍(是什么/为什么快/为什么做MySQL缓存等)

    一、Redis是什么 Redis 是一种 基于内存的数据库 ,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于 缓存,消息队列、分布式锁等场景 。         Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、

    2024年02月10日
    浏览(67)
  • AIMD 为什么收敛(tcp reno/cubic 为什么好)

    TCP 拥塞控制目标是缓解并解除网络拥塞,让所有流量公平共享带宽,合在一起就是公平收敛。 AIMD(几乎所有与拥塞控制相关的协议或算法都有 AIMD 的影子,包括 RoCE,BBRv2) 为什么收敛?我一般会给出下面的老图: 虽然只展示了两条流的收敛,但 n 条流收敛的展示无非就是将

    2024年02月06日
    浏览(76)
  • tcp 为什么要三次握手,两次不行吗?为什么?

    TCP使用三次握手(Three-Way Handshake)的过程是为了确保双方建立起可靠的通信连接,并在连接的建立过程中协商必要的参数。两次握手是不够的,原因主要有以下几点: 防止已失效的连接请求被接受: 假设有A和B两台主机,A向B发送了一个连接请求,但由于某些原因导致连接建

    2024年02月20日
    浏览(63)
  • 为什么美国加息,会让硅谷银行破产?美联储为什么要加息?

    所有回答由 AI 生产 答 : 美国加息会导致国债利率上升,此时购买国债的银行获得的利息收益会比利率较低时少,因此国债的市场价格就会下降,从而导致银行持有的这些国债资产减值。 答 : 美国加息意味着美国央行(即联邦储备委员会)将提高其官方基准利率,这意味着

    2023年04月23日
    浏览(64)
  • 为什么用python做人工智能,为什么人工智能用python

    大家好,给大家分享一下python人工智能为什么放到最后才学,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! Source code download: 本文相关源码 一、为何人工智能(AI)首选Python? 读完这篇文章你就知道了。我们看谷歌的TensorFlow基本上所有的代码都是C++和Python,

    2024年02月22日
    浏览(72)
  • I2C中为什么线与?为什么要有上拉电阻?

            首先,连接到 I2C 上的设备是开漏输出的。以漏极开漏输出(OD)为例,是指将输出级电路结构改为一个漏极开路输出的 MOS 管。这样做的好处在于: 防止短路。 可以实现 “线与”逻辑 ,可以减少一个与门的使用,简化电路。 结论: I2C支持多个主设备与多个从设

    2024年02月09日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包