我没有游戏编程知识,并且不知道如何存储2D游戏中的级别,如Mario和Sonic(等).
"存储"如何存储数据(地面,平台,按钮,升降机等).
也就是说马里奥的水平显然不是某种从左到右移动的非常宽的图像.
Mar*_*ris 23
由于ROM黑客场景,超级马里奥世界的文件格式(我想象当时大多数其他流行的游戏)是众所周知的,基本上完全理解.还有一些文件将以痛苦的细节描述这一切.不幸的是,因为这意味着要访问不合法的网站,我无法为您提供任何工作链接,但如果您谷歌搜索.MWL文件扩展名和一个名为Lunar Magic的编辑应用程序,它可能会指向正确的方向.
但基本原则相当简单.首先你需要你的图形,所以你可以制作一个带有瓷砖的单个图像,用于定义尺寸的景观 - 较小的是更高的内存效率,更大的图片可以提供更多的细节,所以假设我们的是32 X 32像素.所以你最终得到这样的东西(代表不同瓷砖的角色):
! " £ $ %
^ & * ( )
你可以为每个级别的"风格"设置一个标题集,这样就可以消防世界,冰世界,洞穴世界等.这可以节省您在不打算使用的瓷砖中的加载.
接下来你需要一个关卡文件,这开始时包含你要加载的图块集和代表每个图形的数字,如下所示:
fireworld.img 2 2 2 2 2 2 2 2 3 3 2 2 2 2 3 3 3 3 3 3 3 3 3 3
与您上面的tileset合并(取决于您对瓷砖的编号方式)
" " " " " " " " £ £ " " " " £ £ £ £ £ £ £ £ £ £
显然,你需要在此基础上层叠更多信息:哪些图块是实心的,哪些是致命的等等.这可以在图像级别完成(3总是实心的),或者为了更灵活,但是更大的文件,在地图上水平.位标志会做,第一个数字是实数,第二个是致命的:
fireworld.img 200 200 200 200 200 200 200 200 310 310 200 200 200 200 310 310 310 310 310 310 310 310 310 310
除此之外,您还需要使用起点和终点(几个坐标)和敌人(他们使用的图形,他们使用的AI例程,他们开始的位置)为级别文件添加后缀.
完成所有这些后,您可以查看压缩.有许多方法可以节省空间,显然它现在和16和8位时代一样重要,但即便如此,我们上面的格式也是非常浪费的.
一如既往,这些只是基本原则.您的结果可能有所不同
不太相关,但你知道马里奥的云是与灌木丛相同的精灵,只是调色板移动了吗?记忆力真的很贵!
它真的不可能知道它们是如何存储的,但可能采用网格对象的方法,在这里有一些内存节省技巧.实施必然会因游戏而大不相同,而且完全取决于开发人员 - 实际上并没有任何标准方法.
更新:我认为将整个级别表示为(非常宽)网格将是最好的方法.在每个网格框中,你都会放置一个带有属性的精灵(spawn,ground,wall,chest,baddie,spikes等).然后引擎将精灵绘制在正确的位置,但也具有与之关联的属性.如果您连续放置10个楼层,则必须对引擎进行编码以识别连接,并在哪里放置正确的结束件等.显然,任何不是网格的都是天空!
你如何编码这些信息在很大程度上取决于你,因为内存不再是一个大问题,效率并不重要.只是一个目标代码列表,x,y可能会这样做.
所有声称Mario游戏以某种2D数组结构存储其关卡的人都相距遥远:除了前两个GB Mario游戏(可能还有第三个GB)之外,Super Mario游戏也是基于对象的。
每个级别分为几个屏幕,每个级别的总大小相同。每个屏幕都包含一个可变长度的对象列表,每个对象都有一个类型,位置和(取决于类型)其他属性。在关卡开始时,第一个或两个屏幕将被解释并转换为规则的2D数组结构,该结构用于绘制屏幕和进行交互。当关卡滚动通过时,该地图将即时进行重建,从而丢弃超出范围的零件。
这就是为什么如果您回溯敌人会重生的原因,最明显的是在SMW的森林之一中,您可以使用海角从一个毛毛虫到另一个毛毛虫来回跳三个屏幕。顺带一提,因为您从未触碰过地板,因此带来了很多生命。
该系统的细节在课程之间是不同的。
除此之外,马丁·哈里斯(Martin Harris)完全正确。
| 归档时间: |
|
| 查看次数: |
5155 次 |
| 最近记录: |