初学者如何使用Scratch制作一个超级马里奥

由 小石头编程 发表于 2024年03月21日
在这个教程中,我们将学习如何在Scratch上制作一个马里奥游戏。《超级马里奥兄弟》在1985年发布,可以说是有史以来最受欢迎的视频游戏之一,不仅是整个马里奥系列的代表作,也在一定程度上代表了任天堂。《超级马里奥兄弟》属于一个非常流行的街机游戏类型:横向卷轴平台游戏。 “平台游戏”指的是玩家在游戏的任何关卡中必须跳跃在平台上应对障碍物的方式。而真正的“横向卷轴游戏”是指玩家通过移动角色向屏幕右侧移动并不断闯关的游戏。 另一种常见的横向卷轴游戏版本是将一个关卡(或用马里奥的术语来说是“世界”)分成多个部分,要进入新的部分,必须到达前一个部分的终点。这就是我们今天要制作的横向卷轴游戏类型! 我们还将着重打造一个易于扩展的游戏。当游戏开发者制作游戏时,通常会先构建一个游戏“引擎”。引擎有点像游戏的基本框架,它决定了图形以及角色的移动和交互方式。 《超级马里奥兄弟2》于1988年发布,距离原作仅三年。任天堂并没有从零开始制作全新的游戏,他们只是在第一款游戏的基础上进行了扩展。他们增加了新的角色和关卡,还添加了一些新特性,但游戏玩法非常相似。通过一个好的游戏引擎,你可以制作无数个有趣且易于构建的游戏!在本教程中,我们将探讨一些策略,使我们的Scratch编码游戏易于构建。 ## 如何逐步制作Scratch上的马里奥游戏 要制作我们今天的马里奥游戏,我们将使用大量的广播和消息传递,以及大量的X和Y坐标。我们还将学习一些创建平台游戏的高级技巧,并着重保持我们的游戏易于编辑和添加。 你完全可以通过创建自己的Scratch项目来跟着本教程进行,但如果这是你第一次尝试制作平台游戏,我们建议你使用现成的项目,[点我下载超级马里奥](https://www.codxz.com/media/project/%E8%B6%85%E7%BA%A7%E9%A9%AC%E9%87%8C%E5%A5%A5.sb3),该项目已经将所有的角色和造型放在一起,并正确设置了大小。不过,我们仍然需要编写所有的代码!(注意:如果你创建自己的项目,那么你在代码中使用的X和Y坐标可能需要与本教程中使用的不同) ### 1、设置资源 我们将通过整理图像和背景来开始构建这个游戏。让我们创建一个名为“Assets”的新背景。我们实际上不会使用这个背景,但它将包含我们用于角色和创建背景的所有自定义绘图。如果我们把所有东西放在一个地方,构建游戏会更容易。使用相同的游戏引擎构建的游戏通常会使用相同的资源或非常相似的资源。 一旦我们绘制好所有图形,让我们复制帽子,然后将其放在猫角色上;这将成为我们的马里奥。我们还可以复制云,并将一些放在蓝天背景上,作为我们的背景景物。 ![](https://www.codxz.com/media/upload/2024032109193281.png) ![](https://www.codxz.com/media/upload/2024032109215791.png) ![](https://www.codxz.com/media/upload/2024032109213751.png) ### 2、构建关卡 让我们创建一个名为“Backgrounds”(背景)的新角色。每一个造型将是我们游戏世界的一个关卡,我们可以通过从资源背景复制和粘贴来创建每个关卡。这就是在马里奥的Scratch游戏中制作世界的方法:将构建块放在资源部分,然后复制和重新排列它们来构建每个关卡。你可以建立任意多个关卡,但在本教程中我们使用了五个。 我们的“Backgrounds”(背景)角色将负责将我们移动到游戏世界的不同关卡,并告诉其他角色什么时候需要准备好进入每个关卡。每个关卡都将有自己的问号方块、硬币和敌人。我们将通过广播“Delete Clones”(删除克隆)和“Set Level”(设置关卡)来确保每个关卡之间正确重置所有内容。这将在单击绿旗图标时和在切换到下一个“Backgrounds”(背景)造型时发生。 ![](https://www.codxz.com/media/upload/2024032109280389.png) ![](https://www.codxz.com/media/upload/2024032109280905.png) ![](https://www.codxz.com/media/upload/2024032109281526.png) ![](https://www.codxz.com/media/upload/2024032109282031.png) ![](https://www.codxz.com/media/upload/2024032109282792.png) ![](https://www.codxz.com/media/upload/2024032109300316.png) ### 3、添加?方块 您可能已经注意到,在创建关卡时,我们在方块之间留下一些空隙。我们将使用问号方块填充其中的一些空隙。这些方块的行为与普通的背景方块不同,所以它们需要一个自己的角色。当我们设置一个关卡时,我们会把我们的问号方角色移动到我们想要的位置,并进行克隆。它的移动位置取决于我们所在的关卡。 在你的项目中,对于每个关卡,将你的问号方块拖动到你想要的位置,并记下它的X和Y坐标。这就是我们告诉它在该关卡上应该去的位置,并克隆自己。我们将使用类似的策略来放置我们的硬币和敌人。 ![](https://www.codxz.com/media/upload/2024032109340207.png) ![](https://www.codxz.com/media/upload/2024032109371184.png) ![](https://www.codxz.com/media/upload/2024032109391960.png) ### 4、添加碰撞角色 为了使马里奥能够在我们的关卡中移动,他需要能够检测墙壁、地面和天花板。如果前面有个管道,我们不能朝前走;如果有个方块,我们不能从它上面跳过去。我们不能只说“如果碰到背景,就不能移动”;如果马里奥的前面贴着一堵墙,他不能向前移动,但他仍然可以向后移动和跳起来。 我们将创建四个角色,它们是细线,跟随在马里奥的位置后面,这些角色将告诉我们关于马里奥周围环境的信息。这些角色将设置变量,告诉我们他是否能向右、向左、向上或向下移动。例如,如果“Right”角色与“Backgrounds”角色接触,我们将把“Right-Touching”设为1,然后我们就会知道马里奥面前有一些东西。如果“Right-Touching”为0,那么马里奥面前就没有东西。 ![](https://www.codxz.com/media/upload/2024032109432315.png) ![](https://www.codxz.com/media/upload/2024032109434301.png) ![](https://www.codxz.com/media/upload/2024032109440009.png) ![](https://www.codxz.com/media/upload/2024032109441326.png) ![](https://www.codxz.com/media/upload/2024032109442651.png) ### 5、使用箭头键移动马里奥 马里奥应该能左右移动,在站在地面上的时候能够跳跃,在下面没有东西的时候能够下落。我们将使用我们的检测变量来帮助我们。我们还希望当马里奥移动时,他能够有动画效果,并确保他在第1关开始时站在正确的位置,面对正确的方向。 如果你想知道如何在Scratch上制作一个滚动平台游戏,一种方法是在检测角色到达上一个关卡的末尾时,移动到下一个关卡。我们可以通过不断检查角色的X位置,并在它们接触到右边缘时广播“Next Screen”(下一关)的消息来实现这一点。另一种方法是将整个“世界”作为背景角色的一个巨大造型,并在玩家向前移动时向左移动背景角色的X位置。后一种方法创造了一个很酷的效果,但使编辑游戏和添加内容变得更加复杂。 这里有很多代码,以后还要添加更多代码,所以使用注释把代码组织起来是个好主意。您可以通过右键单击代码块来添加注释。当你有很多代码,特别是复杂的代码时,注释非常重要,并且应该简洁明了。如果您能迅速看到哪一段代码负责什么,那么修复代码中的错误将会更快一些。 ![](https://www.codxz.com/media/upload/2024032109512106.png) ### 6、添加浮动硬币 现在我们将引入一个“Score”(得分)变量。在每个关卡中,我们将添加一些浮动的硬币,就像我们添加?方块一样。我们将绘制一个新的角色,并通过复制资源背景中的硬币来创建其造型。然后,我们将将角色移动到该级别的正确位置,并创建一个该角色的克隆。当克隆角色被创建时,我们将一直检查并观察玛丽奥是否碰到它,如果碰到,我们可以将“Score”(得分)加一。让它们轻轻地上下滑动将会产生一个漂亮的浮动动画。 ![](https://www.codxz.com/media/upload/2024032110010094.png) ![](https://www.codxz.com/media/upload/2024032110012336.png) ![](https://www.codxz.com/media/upload/2024032110025723.png) ### 7、添加“?”块奖品 在原版超级马里奥兄弟游戏中,击中一个“?”块可能会给你一个硬币或者一个道具。我们将为我们的游戏做类似的事情。大多数情况下,“?”块会有一个硬币,这将增加我们的“Score”得分,但有时它会有一个星星,我们可以拾取并暂时获得无敌状态。无敌状态将保护我们免受稍后我们将添加的敌人的攻击,我们将在下一步中编写这部分代码。 首先,让我们为我们的“?”块添加代码。当马里奥跳进“?”块时,我们将切换其造型,使其上下移动一点,选择要给予的奖励,并保存块的位置。"?-Block-X"和"?-Block-Y"变量将负责告诉我们的新奖品星和奖品硬币角色要去哪里。 现在,我们可以创建奖品星角色和奖品硬币角色。当这些角色收到消息时,它们将去到刚刚被击中的“?”块,并出现。如果是硬币,它将消失并添加到“Score”得分中。如果是星星,它将等待马里奥来拾取,并在他拾取时广播“Invincible”(无敌)消息。 ![](https://www.codxz.com/media/upload/2024032110083584.png) ![](https://www.codxz.com/media/upload/2024032110091227.png) ![](https://www.codxz.com/media/upload/2024032110095720.png) ![](https://www.codxz.com/media/upload/2024032110101280.png) ### 8、添加无敌功能 每当奖励星碰到马里奥时,我们会广播一个“Invincible”(无敌)消息。现在让马里奥对该消息做出反应。我们的主要目标是设置“Invincible”变量。我们还将使马里奥改变颜色,以显示他对敌人无敌。这将持续五秒钟,然后我们将把“Invincible”变量设回0。我们还将确保在点击绿色旗帜时将“Invincible”设置为0(注意:我们还将把“Score”得分设置为0)。 ![](https://www.codxz.com/media/upload/2024032110154035.png) ![](https://www.codxz.com/media/upload/2024032110145528.png) 现在是时候添加敌人了!本教程中共有三个敌人,它们每个都会有一些不同的行为,因此我们将为每个敌人创建一个新的角色,并逐个添加它们。你可以自己绘制敌人(把它们添加到资源背景中!),但在本教程中我们将使用普通的Scratch角色。 我们将像添加问号方块和飘浮硬币一样将敌人添加到每个关卡中,但由于没有任何关卡会有多个同类型的敌人,我们不需要使用克隆。每当放置一个敌人时,我们还会给它一个路径,或者两个它应该来回滑动的位置。每个敌人还会检查马里奥是否无敌,如果是,我们将把它们打飞到屏幕外。如果马里奥不是无敌,那么当他碰到敌人时可能会失败,我们将在马里奥的角色里放置这段代码。 ### 9、添加第一个敌人 (刺猬) 刺猬敌人虽然体型小,但是一定要避开。我们将在第2、3和5关中添加刺猬。如果马里奥在没有无敌状态时触碰到刺猬,游戏就会结束。 ![](https://www.codxz.com/media/upload/2024032110265808.png) ![](https://www.codxz.com/media/upload/2024032110270858.png) ### 10、添加第二个敌人 (恐龙) 恐龙比刺猬大得多,但有点笨拙。马里奥实际上可以通过跳在它的头上来击败这个敌人,即使他没有无敌状态,但前提是恐龙没有张开嘴巴。我们通过检测底部碰撞角色是否接触、马里奥是否在恐龙上方以及恐龙的造型编号是否小于4来进行判断。恐龙敌人将出现在第3关和第5关中。 ![](https://www.codxz.com/media/upload/2024032110294073.png) ![](https://www.codxz.com/media/upload/2024032110295691.png) ### 11、添加第三个敌人(鹦鹉) 鹦鹉可以说是最危险的敌人;它会向马里奥扔蛋,在他穿越关卡时造成威胁!蛋将是一个单独的角色,在鹦鹉发送“Throw Egg”(扔蛋)的消息时,蛋会重复出现在鹦鹉前方并在屏幕上滑动。鹦鹉只会在我们游戏的第四关中出现。 ![](https://www.codxz.com/media/upload/2024032110321978.png) ![](https://www.codxz.com/media/upload/2024032110324015.png) ![](https://www.codxz.com/media/upload/2024032110324902.png) ### 12、检测是否失败 现在我们已经编写好所有敌人的代码,我们需要编写代码来检查马里奥是否和它们接触(当他没有无敌状态时)。如果他接触到敌人1,或者敌人2的造型编号等于4时,或者敌人3或蛋,我们会广播一个“game over”(游戏结束)的消息,停止马里奥的代码,并隐藏马里奥。 你可能会注意到在三个“如果-那么”代码块中我们正在做相同的事情。为什么不只是写一个非常大的“如果-那么”代码块呢?有时候,如果能使代码更易于阅读和更易于更改,写更多的代码可能更好。如果那些代码更难处理,那么在我们的项目中减少代码是没有意义的! 另一种失败的方式是如果马里奥从屏幕下方掉出,所以我们也可以检查这个条件。我们将做与如果马里奥接触到敌人相同的操作,不过不包括滑动的代码块。 ![](https://www.codxz.com/media/upload/2024032110350524.png) ### 13、检测是否胜利 让我们创建两个新的角色,一个是胜利旗帜角色,一个是胜利角色。胜利旗帜将会放在第五关的终点处,我们将像之前设置敌人一样,使用“Set Level”(设置关卡)消息和“移到 X,Y”模块来放置它。当马里奥接触到这个旗帜时,我们将广播“Win”(胜利)消息,并显示胜利角色和分数。 ![](https://www.codxz.com/media/upload/2024032110385482.png) ![](https://www.codxz.com/media/upload/2024032110392069.png) ![](https://www.codxz.com/media/upload/2024032110394541.png) ![](https://www.codxz.com/media/upload/2024032111001525.png) ### 14、添加背景音乐 现在是时候在Scratch中加入音乐了!我们的游戏几乎完成了;最后的修饰将是一些声音。你可以上传一个超级马里奥兄弟的音频文件来增加经典的感觉,但是在本教程中我们将使用内置的Scratch音频,“, Video Game 1”。我们还需要为马里奥的无敌状态添加背景音乐,以及输和赢的音效。 每当我们播放一个新的声音时,我们要使用“停止该角色的其他脚本”模块停止正在播放的其他声音。我们将在马里奥的代码中添加另一个广播,以便在他的无敌状态结束后重新开始常规音乐。 ![](https://www.codxz.com/media/upload/2024032110462196.png) ![](https://www.codxz.com/media/upload/2024032110474517.png) 这就是我们在Scratch中的自己的马里奥游戏!更重要的是,我们有了一个有用的游戏引擎的开端,可以用它来制作任何类型的平台游戏。 我们可以通过从我们的资源背景中拿出部分内容,并在我们的背景角色中制作新的造型来轻松建立关卡和世界。我们可以通过连接“Set Level”(设置关卡)消息,并使用“移到 X,Y”模块将敌人和其他互动角色添加到每个关卡中。我们还可以添加什么其他东西到这个游戏中?新的敌人、新的世界?