第2部分 - 硬币场景
在这部分中,您将为玩家收集硬币。这将是一个单独的场景,描述单个硬币的所有属性和行为。保存后,主场景将加载硬币场景并创建它的多个实例(即副本)。
节点设置
单击Scene | New Scene并添加以下节点。不要忘记将子项设置为不被选中,就像使用Player场景一样:
- Area2D (重命名 Coin )
- AnimatedSprite
- CollisionShape2D
添加节点后,请务必保存场景。
像在Player场景中一样设置AnimatedSprite。这一次,你只有一个动画:shimmer(闪烁)效果,使硬币看起来不那么扁平和无聊。添加所有帧并将Speed(FPS)设置为12。图像有点太大,因此将AnimatedSprite的Scale设置为(0.5,0.5)。在CollisionShape2D中,使用CircleShape2D并调整其大小以覆盖硬币图像。不要忘记:在确定碰撞形状的大小时,切勿使用缩放手柄。圆形有一个手柄,可以调整圆的半径。
使用组
组为节点提供标记系统,允许您标识类似的节点。节点可以属于任意数量的组。您需要确保所有硬币都在一个称为coins的组中,以便玩家脚本能够正确地对触摸硬币作出反应。选择Coin节点,然后单击Node选项卡(找到信号的同级选项卡)并选择Groups。在框中键入coins,然后单击“Add添加”,如以下屏幕截图所示:

脚本
接下来,将脚本添加到Coin节点。如果在Template(模板)设置中选择Empty(空白模板),Godot将创建一个没有任何注释或建议的空脚本。Coin脚本的代码比Player的代码短得多:
extends Area2D
var screensize
func pickup():
queue_free()
pickup()
函数由Player脚本调用,并告诉硬币在收集时要做什么。 queue_free()
是Godot的节点删除方法。它安全地从树中删除节点,并将其与所有子节点一起从内存中删除。之后,你会在这里添加一个视觉效果,但是现在硬币消失已经足够了。
提示
queue_free()
不会立即删除该对象,而是将其添加到要在当前帧结尾处删除的队列中。这比立即删除节点更安全,因为游戏中运行的其他代码可能仍然需要节点存在。通过等到框架结束,Godot可以确保可以访问节点的所有代码都已完成,并且可以安全地删除节点。
网友评论