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

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

相关文章

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用