游戏节点设置17 Mar 2025 | 5 分钟阅读 点击场景 -> 新建场景,我们将创建 Mob(怪物) Mob 场景将使用以下节点 - RigidBody2D (命名为 Mob)
- AnimatedSprite(动画精灵)
- CollisionShape2D(碰撞形状)
- VisibilityNotifier2D (命名为 Visibility)
不要忘记设置子节点,这样它们就不能被选中,就像我们对 Player 场景所做的那样。 在 RigidBody2D 属性中,将 Gravity Scale(重力缩放) 设置为 0,这样 Mob 就不会向下掉落。此外,在 PhysicsBody2D 部分下,单击 Mask 属性并取消选中第一个框。这将确保 Mob 之间不会相互碰撞。  像设置玩家一样设置 AnimatedSprite。这次,我们有三个动画:fly(飞), swim(游), 和 walk(走)。将 Inspector(检查器) 中的 Playing(播放) 属性设置为 "On",并调整 "Speed(FPS)" 设置,如下所示。我们将随机选择这些动画中的一个,以便 Mob 具有一些多样性。 Fly(飞) Swim(游) Walk(走) Fly(飞)应该设置为 3FPS,swim(游)和 walk(走)设置为 4 FPS。 与玩家图像一样,这些 Mob 图像需要缩小。设置 AnimatedSprite 的 Scale(缩放) 属性 (0.75,0.75)。 就像在 Player 场景中一样,为碰撞添加一个 CapsuleShape2D。为了使形状与图像对齐,我们需要将 Rotation Degrees(旋转角度) 属性设置为 90,在 Node2D 下。 敌人脚本将脚本添加到 Mob 并添加以下成员变量 GDScript 我们必须在 min_speed(最小速度) 和 max_speed(最大速度) 之间选择一个随机值,以确定每个 Mob 的移动速度(如果它们都以相同的速度运行会很无聊)。在检查器中将它们设置为 150 和 250。我们还有一个包含三个动画名称的数组,我们将使用它来选择一个随机动画。 现在让我们看看脚本的其余部分。在 _ready() 中,我们随机选择三种动画类型中的一种 GDScript 注意 如果我们希望每次运行场景时我们的 "random(随机)" 数字序列都不同,则必须使用 randomize()。我们将在我们的 Main(主) 场景中使用 randomize(),因此我们在这里不需要它。 randi()%n 是在 0 到 n-1 之间获得随机整数的标准方法。最后一部分是让 Mob 在离开屏幕时删除自己。连接可见性节点的 screen_exited() 信号并添加此代码 GDScript 它完成了 Mob 场景。 主场景 现在是把所有东西组合在一起的时候了。创建一个新场景并添加一个名为 Main(主)的节点。单击 "Insurance(保险)" 按钮并选择我们保存的 Player.tscn。  注意 请参阅 Instancing(实例化) 以了解有关实例化的更多信息。现在添加以下节点作为 Main 的子节点,并按所示命名(值以秒为单位) - Timer (命名为 MobTimer) - 它用于控制 Mob 的生成频率。
- Timer (命名为 ScoreTimer) - 它用于每秒增加分数。
- Timer (命名为 StartTimer) - 在开始之前提供延迟。
- Position2D (命名为 StartPosition) - 用于指示玩家的起始位置。
按如下所示设置每个 Timer 节点的 Wait Time(等待时间) 属性 - MobTimer: 0.5
- ScoreTimer:1
- StartTimer:2
此外,将 StartTimer 的 One-Shot(单次) 属性设置为 "On",将 StartPosition 节点的 Position(位置) 设置为 (240,450)。 生成 Mob主节点将生成新的 Mob,我们希望它们出现在屏幕边缘的随机位置。添加一个名为 MobPath 的 Path2D 节点作为 Main 的子节点。当我们选择 Path2D 时,我们将在编辑器顶部看到一些新按钮  选择中间的那个(“添加点”)并通过单击以添加所示角的点来绘制路径。要使点捕捉到网格,请确保选中“捕捉到网格”。此选项可以在“捕捉选项”按钮下方找到,该按钮位于“锁定”按钮的左侧, 显示为一系列三个垂直点。确保也启用了“使用捕捉”按钮,该按钮位于“捕捉选项”的左侧。  重要性 按顺时针方向绘制路径,因为我们的 Mob 将向外生成而不是向内! 在图像中放置点 4 之后,单击“闭合曲线”按钮,我们的曲线将完成。 现在定义了路径,添加一个 PathFollow2D 节点作为 MobPath 的子节点,并将其命名为 MobSpawnLocation。此节点将在移动时自动旋转并跟随路径,因此我们可以使用它来选择沿路线的随机位置和方向。 主脚本将脚本添加到 Main。在脚本的顶部,我们使用 export (PackedScene) 允许我们选择我们要实例化的 Mob 场景。 从“FileSystem(文件系统)”面板拖动 Mob.tscn,并将其放置在 Main 节点脚本变量下的 Mob 属性中。 接下来,单击玩家并连接 hit(被击中) 信号。我们想要创建一个名为 game_over 的新函数,它将处理新函数,该函数名为 game_over,它将处理游戏结束时需要发生的事情。 在“连接信号”窗口底部的“节点中的方法”框中键入“game_over”。添加以下代码,以及 new_game(新游戏) 函数,以便为 新游戏 设置所有内容 在 _on_MobTimer_timeout() 中,我们将创建一个 Mob 实例,选择沿 Path2D 的随机起始位置,并启动 Mob。PathFollow2D 节点将在其跟随路径时自动旋转,因此我们将使用它来选择 Mob 的方向及其位置。 请注意,必须使用 add_child() 将新实例添加到场景中。 GDScript 重要性GDScript 使用弧度,而不是度数。如果我们对使用度数更舒服,我们需要使用 deg2rad() 和 rad2deg() 函数在两者之间进行转换
|