一、(译)使用“马里奥方法”设计游戏关卡

2024-01-31 09:50

本文主要是介绍一、(译)使用“马里奥方法”设计游戏关卡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

译者序

《马里奥》的关卡设计历经多个系列的积淀和发展,已经达到了同类游戏无法企及的高度。关于《马里奥》关卡设计方法的论述和研究,无论是通过开发者采访还是研究者解构游戏反推,目前游戏业界已有不少相关文章。然而很多设计师依然没能从这个长寿的游戏系列中汲取到养分,大量粗制滥造的Platformer关卡设计就是证据。这里翻译的这篇文章利用一个完整的游戏关卡实例深入浅出地讲解了“马里奥方法”的核心概念,是我看过的最佳相关教材。

作者序

几年前,我写了一本书专门分析《超级马里奥世界》中的每一个关卡(1990),书中我阐释了每一个游戏关卡在设计时所遵循的系统方法。《超级马里奥世界》是值得学习的一代经典,但从中习得的知识却可以广泛地应用于各类游戏设计领域。”马里奥关卡设计法“,或者说”任天堂关卡设计法“实际上存在于大量游戏之中——甚至是那些并非任天堂开发的游戏。

本教程中,我们将一睹自90年代起便不断在进化的优雅关卡设计方法。随着游戏设计师(特别是任天堂的设计师)对于他们的技艺日臻成熟,他们排布关卡内容的方法也日趋直观。在此,我将为你讲解如何在自己的游戏中使用这些直观的关卡设计方法。

我的范例

我使用”马里奥方法“搭建了一个《超级马里奥制造》关卡用于教学,视频如下:

width="100%" height="400" src="http://player.youku.com/embed/XMTQxOTIzODExMg==" frameborder="0" allowfullscreen="" style="box-sizing: border-box;">

关卡ID:0740-0000-00CD-4D5B

挑战,韵律,技巧主题

我们将要学习的关卡设计法的全名是”挑战,韵律,技巧主题“(Challenge, Cadence, Skill-Theme),简称CCST。为了方便起见我将使用《超级马里奥制造》中的关卡来讲解CCST方法的核心思想。不过我在《洛克人》、《银河战士》、《传送门》、《半条命》、《超级食肉男孩》等很多其他游戏中也看到了CCST方法的运用。通过实践,你也可以在自己钟爱的某些游戏中洞悉到CCST的存在,并将其运用于自己的游戏之中,更好的组织关卡内容并为游戏增加深度。

挑战

首先需要定义并理解什么是”挑战“。

一个挑战是指被 安全边界包围的、玩家必须 一次性完成的、一小段 任务

下图展示了一个挑战:马里奥必须跳到悬崖上方的移动平台上然后跳下来。


在移动平台的左右两侧,玩家可以安全地驻足等待,不过一旦跳上移动平台,玩家就必须格外小心以防坠落悬崖损命——因此,这个挑战开始、结束于移动平台左右两侧安全而稳固的地面。

让我们再看一个更复杂些的例子:我为接下来的挑战增加了一个不同类型的移动平台(纵向移动平台)。对于这个挑战,安全的边界依然是两侧的固定地面,但这一回玩家必须跳过两个不同类型的移动平台才能再次抵达安全地带。


虽然这个挑战的内容更多、难度更大,但它依然是一个挑战,因为玩家必须一次性跳过两个移动平台才能抵达右侧的挑战安全边界

挑战有时可以做得很庞大,但你必须牢记一个挑战一定会被安全(相对的)边界所隔开,在这些安全边界区域中玩家可以稍作”休息“以应对下次挑战。挑战和安全边界在不同的游戏中也会有所不同,例如在《索尼克》中某些挑战要比《马里奥》长很多,因为索尼克移动速度极快,需要更长的距离来减速、急停、变相。即便如此,挑战的概念在这里依然是一致的。

为关卡填充挑战

仅仅知道挑战为何物是远远不够的,优秀的设计师知道如何将他们填充到关卡中。关卡应该逐渐变难,否则就会让人感到无聊。然而设计师决不能将各种挑战杂乱无章地散落在关卡之中——挑战与挑战之间的关系应该连贯而清晰,因此我们需要学习不同类型的挑战以及他们彼此之间的关系。

进化(Evolutions)

我们先来看看上文展示的两个挑战之间具有怎样的联系:

这两个挑战有何不同?他们都是基于移动平台的挑战,只是第二个挑战增加了一些新内容:两个不同类型的移动平台,沿着不同的运动轨迹,依照不同的节奏同时移动。所有这些新增的复杂度均来自”类型“或”方式“的改变。


如果两个挑战的区别来自于新增的” 质变类“元素,我们就将后面这个挑战定义为前者的”进化“。挑战2是挑战1” “上的迭代与提升( 质变)。

我们再看一个进化的例子:


这一次我在两个移动平台之间增加了一个上下移动的电锯。这使得复杂度再一次得到了“质”的提升,使得玩家更难找到合适的跳跃时机。

在复杂度方面这显然不是一个多大的飞跃。任天堂的游戏通常会一小步一小步地提高游戏难度:在一个高难度关卡的结尾,逐渐堆砌起来的进化最终创造出最难的挑战,但是这个过程总是通过一次次小幅度进化完成的。

增量(Expansions)

还有另一种方法可以在遵循关卡核心设计思路的前提下增加挑战难度。在下图展示的挑战中我重新迭代了挑战1,但加入了一处显著的变化:


我增加了固定地面和移动平台之间的距离。由于马里奥的跳跃距离增加了,跳跃的难度也得以略微提高。这就是我所说的增量挑战。

增量是指在上一个挑战的基础上进行某些“ ”上的增加。

如上例所示,两个平台之间的距离被增加至3倍。让我们再看一个例子:


这个挑战和此前第二个“进化”挑战很像,只是我将两个移动平台之间的电锯数量加倍了。由于安全的跳跃时机进一步减少跳跃难度再次提高——不过这些改变均来自简单的“量变”——电锯从1个变成2个。

增量挑战很容易实现,因为设计师只需增加挑战中已经存在的元素。也正因如此,经验不足的设计师经常会过度使用增量挑战(关于这一点我们会在另一篇教程中做进一步讨论)。

进化,增量,重置

在为你的关卡添加进化增量类挑战之前,还有几条设计方法值得一提。

首先,《马里奥》的游戏关卡不会沿着一个方向持续进化,而是经常“重置”回初始状态,再从另一个方向重新开始进化过程。

如下图所示:


我的关卡并未沿着循环移动平台的方向一直增加复杂度,而是中途转向了另一个方向。在这个挑战中,移动平台进化成了单向线性移动平台,马里奥不再需要想方设法跳到另一个平台上,而是要在平台前进的过程中躲避敌人。

虽然运用的技巧是相同的——在恰当的时机跳跃——但这是一个全新的进化方向。在后续的几个挑战中,我们将沿着这个方向持续进化每一个挑战。

接下来的挑战延续了线性移动的点子:


不难发现在这个挑战中我同时使用了“进化”和“增量”。下沉的移动路线属于“质变”,而中间平台上方更多数量的敌人则属于“量变“。因此这个挑战即是一个进化也是一个增量。

在《超级马里奥世界》中,同时进化和增量的挑战和仅在单方面变化的挑战几乎一样常见。

最后,我的关卡结束于这个挑战,在这里我加入了最初的循环移动平台元素:


这是一个惯用的策略——两个不同的进化分支最终在关卡结束时会和。在我的关卡中,循环移动平台和线性移动平台共同构成了最后的高潮挑战。

韵律

现在,我想回到关于“韵律”的定义上来。

韵律是指关卡中所有挑战之间的联系和组合方式。

为了更直观的讲解这个概念,我给我制作的关卡画了一张韵律图:


如你所见,关卡可以分解为两条支线,我称之为“叉子”韵律,然后在终点汇合。

在《超级马里奥世界》和其他任天堂游戏中,我们可以看到各式各样的韵律:


在其他开发者开发的游戏中可以看到更多种类的韵律。韵律结构并不会在关卡设计中束缚你的创意,恰恰相反,韵律带来的限制反而可以更大限度地激发你的创意。

CCST框架只是辅助设计师将他们的关卡内容变得更有条理、更加连贯的工具。“进化”和“增量”理论上可以应用于任何游戏的任何游戏机制。韵律可以辅助理解关卡背后内在的设计模式。

结语

尽管我将上述理论称为我的研究成果,可实际上本文所讨论的所有东西(还有接下来将会讨论的)都浑然天成地融入在了传统游戏之中。理论与实践同样重要,关卡设计没有通用的良方,带上CCST框架,希望它可以帮到你。

原文链接:http://gamedevelopment.tutsplus.com/articles/how-to-design-levels-with-the-super-mario-world-method--cms-25177

这篇关于一、(译)使用“马里奥方法”设计游戏关卡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/663357

相关文章

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项