添加硬币并显示收集的硬币数量
警告
本教程版本已弃用。请参考新平台游戏教程。
到目前为止,我们创建的平台游戏中,玩家没有太多事可做:让我们添加一些硬币让玩家收集。
添加硬币
首先创建一个带有动画和coinGold
图像的新Sprite
对象:
您可以将此对象命名为“硬币”
然后在关卡中放置几个硬币。由于您需要多个硬币,因此最好使用场景编辑器的“拖放和克隆”功能:选择一个硬币,按住Ctrl(或macOS上的Cmd),然后拖动硬币。这将使其复制。
如果在移动时按住Shift,您还可以将创建的硬币移动到与原始硬币相同的轴上。
收集硬币时删除硬币
现在,让我们在玩家触碰硬币时销毁硬币对象。添加一个新事件并添加一个条件。选择条件来测试两个对象之间的碰撞。第一个对象应为“Player”,第二个对象应为“Coin”:
然后可以添加一个动作来删除硬币。只有由第一个条件选择的Coin对象将被动作使用,因此只有与玩家发生碰撞的硬币将被删除。
添加动作“删除对象”(来自类别Common actions for all objects > Objects
),并输入Coin作为要删除的对象:
事件应如下所示:
现在可以启动预览,看到玩家在其上跑时硬币被删除!
收集硬币时播放声音
为了使游戏感觉更具动态和奖励性,让我们在收集硬币时播放声音。
这很简单:我们已经在游戏文件夹中拥有一个名为coin.wav
的声音文件(如果不是这种情况,您可以在此处下载资源并提取到游戏文件夹中)。
这是我们以前没有做过的事情:我们可以将多个动作添加到单个事件中以执行。为了播放声音,让我们在用于删除硬币的事件中添加另一个动作。在“删除对象Coin”动作的正下方点击‘添加动作’,并添加名为Play a sound
的动作,来自Audio
类别。这样,我们不仅会删除硬币,还会播放声音。
播放声音有许多参数可用。第一个最重要的是要播放的声音文件。点击字段,然后选择“选择新音频文件”。
选择您与其余资产一起下载并放在游戏文件夹中的文件coin.wav
:
将其他参数保持不变(即:不要重复播放声音,音量为100
,声音的默认速度)。
就这样!只需启动预览,每次您收集硬币时声音将播放👍
使用变量增加得分
我们将使用变量来更新和记住玩家的分数。
变量是容器,我们可以用来存储和记住某些信息,例如数字和字符串(文本)。在GDevelop中有不同类型的变量:
- 对象变量是私有变量,专门针对对象的每个实例。这意味着每个实例可以存储自己的值,而不与其他实例共享。例如,如果我们想要更改每个敌人的生命值,则这可能很有用。
- 场景变量(最常用的)是附加到场景的变量。这意味着它们的值不会与游戏中其他场景共享。它有助于仅存储与当前播放场景相关的信息。例如,玩家的生命或得分。
- 全局变量正如其名称所示,在整个游戏中是全局的。值与整个游戏中的所有场景共享。如果我们希望存储要在所有场景之间共享的信息,比如玩家持有的子弹数量或金额,请使用它。
我们将要使用的变量是场景变量,将被命名为“得分”。
在我们制作的最新事件中添加一个动作。选择动作Variables > 变量值
。此动作将用于将100添加到得分变量,因此填写参数如下:
在GDevelop中,我们无需在使用变量之前声明变量,只需在动作或条件中命名变量即可使用任何变量。如果我们正在使用未声明的变量进行操作,GDevelop将会自动为我们创建它,并在执行操作后将变量的默认值设置为‘0’(或空文本),以免给我们带来任何麻烦。
但是,为了更好地组织您的游戏,最好在使用变量之前声明变量。这样,可以轻松找到您在游戏中使用的变量。您还可以更改它们的默认值,如果希望其为除0之外的其他值。要声明变量,请点击变量名称右侧的“…
”按钮。这会显示变量列表:
列表显示为空,因为尚未声明任何变量:
您可以单击“+”按钮添加一个变量,并将其命名为“分数”:
请记住,这完全是可选的,只是一个好的做法。
使用文本对象显示分数
添加文本对象
现在,分数变量还看不见,所以我们无法验证分数是否增加(我们可以使用调试器来验证,但玩家看不到)。
我们需要使用一个文本对象来显示分数变量的值。让我们添加一个新对象。这次在要创建的对象类型时选择文本
:
然后更改对象属性,使文本为黑色且大于默认大小:
然后将对象放置在场景中:
更改文本图层
如果启动游戏,您会发现分数文本与其他对象一起显示,并且其位置不固定在屏幕上。我们可以通过在基础图层上方使用一个图层来轻松解决这个问题。使用此按钮打开图层编辑器:
显示图层列表,目前只有基础图层:
单击“+”按钮添加一个图层。输入“UI”作为其名称(UI代表用户界面)。
最后,通过在场景上选择文本实例并在左侧属性中选择UI图层,将文本对象移动到这个新图层:
确保对象显示在屏幕的某个可见位置,例如,将其放在左上角。场景编辑器上的黑色矩形代表窗口的大小:
显示分数值
现在我们在屏幕上有了一个文本,是时候让它显示分数变量的值了。添加一个新事件。这个事件不会有任何条件,这意味着这个动作将在每一帧游戏被渲染在屏幕上时执行(大约每秒60次)。
添加一个动作,选择“文本对象”类别中名为“修改文本”的动作。
对于第一个参数,选择“分数”对象,因为我们想要更新此对象。对于第二个参数,选择=(设置为)
运算符(我们想将文本设置为新值)。最后,最后一个参数表示文本的新内容。这是一个字符串表达式,将在游戏运行时由GDevelop评估。
我们可以通过在引号之间写文本来指定一个文本(像这样:“你好世界”
)。但我们也可以使用称为表达式的东西。表达式是返回某个值的函数。在这种情况下,我们需要分数变量的值,并且我们希望使用该值来更新文本对象的内容。表达式是一个更高级的话题,所以我们暂时不会深入讨论。
您现在需要知道的是,为了获取场景变量的值,我们需要使用表达式Variable(variableName)
。由于它是一个数字变量,但我们需要将值作为文本使用,因此需要将此表达式返回的值转换为字符串。我们可以通过使用另一个称为ToString(valueToConvert)
的表达式来执行此操作。因此,实际表达式应如下所示ToString(Variable(Score))
。
最后,我们可以在静态文本之后使用+
运算符添加此表达式:“分数:” + ToString(Variable(Score))(请注意文本周围的双引号)。
在GDevelop中还有许多其他功能和表达式。通过组合它们,您可以创建执行高级工作的强大动作。您可以通过单击值字段旁边的蓝色图标打开表达式编辑器查找更多表达式:
以下是最终事件:
您可以预览游戏,查看收集硬币时分数的显示和更新!
奖励:确保同时收集两个硬币有效
您可能已经注意到,如果您同时收集两枚硬币(例如,如果两枚硬币重叠),分数仅增加一次。例如,如果每枚硬币价值100分,您收集了2枚硬币,则分数只会增加到100而不是200。解决此问题很容易,这是我们尚未涉及的内容:我们将使用一个称为“对每个对象”的事件。我们将告诉引擎,对于每个收集到的硬币,将100添加到分数中。
首先,在事件编辑器的工具栏中单击+按钮:
选择“对于每个对象”:
这将在事件页面底部添加一个事件。将其拖动并使其成为与硬币玩家碰撞的子事件:
点击选择一个对象,并选择硬币对象。
现在,将对象添加到子事件中,让我们将动作移动到子事件中(这样动作将根据条件选择的每个硬币重复执行)。
将鼠标悬停在第一个动作上,右键点击并剪切它,然后将鼠标悬停在子事件中的动作上,右键点击并粘贴。对其他两个动作也执行此操作。您也可以拖放动作,这比剪切粘贴更快。
最终事件应如下所示:
现在运行游戏,您会发现如果您同时收集两枚硬币,得分将正确更新如果您同时在两枚硬币上运行。
注意:
您可以通过在场景中的相同位置放置两枚硬币来检查其正常工作。
下一步:添加敌人
每个平台游戏都有您必须避开或跳到它们上面来杀死敌人!让我们添加一些并看看我们如何使它们移动。
➡️ 阅读 6 添加敌人!