godot-rust(gdext)你的第一个2D游戏 - 2

35 阅读4分钟

简介

本文以你的第一个 2D 游戏 — Godot Engine (4.5) 简体中文文档为蓝本撰写,godot-rust提供了该教程的一个rust的实现dodge-the-creeps,与本文方法会稍有不同。如果你对rust、godot等内容比较生疏或感到疑惑,可以先阅读godot-rust入门文档

本文搭建在godot-rust(gdext)创建项目的基础之上,如果你对该部分内容感到生疏,可以先阅读这部分内容,为接下来的操作做好准备。

注意,本文使用的godot版本为4.5.1,godot版本的变化可能会导致一些内容失效

本文操作均在Windows上执行。

正文

创建玩家场景

让我们进入rust,创建玩家Player对象,你可以直接在lib.rs中编写,也可以分文件编写,只需要记住在lib.rs中用mod进行声明。

use godot::{
    classes::{Area2D, IArea2D},
    prelude::*,
};

#[derive(GodotClass)] // 将Player注册为godot中的类
#[class(base=Area2D)] // 指定Player继承于Area2D
struct Player {
    base: Base<Area2D>, // 用组合方式提供访问Player的父类实例的入口,即Area2D实例
}

#[godot_api] // 告知gdext接下来impl的内容供godot使用
impl IArea2D for Player { // 使用IArea2D trait模拟继承Area2D
    fn init(base: Base<Area2D>) -> Self { // 重写init方法
        Self { base }
    }
}
  • #[class(base=T)]base: Base<T>T必须保持一致
  • base: Base<Area2D>不是必须字段,但缺少该字段将无法使用self访问父类对象
  • #[class(base=Area2D)]不是必须的,不指定时,默认父类为RefCounted
  • IArea2Dinit方法形式可参考文档。若不显式编写该方法,编译器会提示Player需要init的错误。

编译rust项目:

cargo build

回到godot编辑器,在左上角场景选项卡中点击其他节点

创建节点

在弹出的对话框中搜索player,会发现一个在Area2D节点下的子类型节点Player,创建它:

创建Player节点

Player节点创建完成

你已经成功地将你编写的Player节点添加到了godot中。这时你会注意到节点后面有一个黄色警告,提示你节点需要一个形状来检测碰撞或重叠,不用担心,后面会逐一解决。

选中Player节点,点击工具栏里的编组所选节点图标,让Player及其子节点进行编组。

组合节点

确保不会通过点击Player和其子节点来意外移动它们或调整它们的大小

点击场景->保存,或者使用ctrl + s保存player.tscn场景。

此时在godot的文件系统选项卡中结构应该像这样:

保存player场景

选中Player节点,有三种方法来添加子节点。使用ctrl + a,或者右键点击Player->添加子节点,或者点击场景选项卡中左上角的+号图标。

添加子节点

添加一个AnimatedSprite2D节点来处理Player的外观和动画。选中AnimatedSprite2D节点,在godot编辑器的右边检查器选项卡中找到Sprite Frames属性,点击新建SpriteFrames

新建SpriteFrames

检查器选项卡中点击你刚刚创建的SpriteFrames,godot编辑器的下方会弹出 "SpriteFrames" 面板。

SpriteFrames面板

重命名defaultwalk,使用添加动画按钮,再创建一个名为up的动画。

文件系统选项卡中的art文件夹下拖动图片到动画帧中:

  • playerGrey_walk1playerGrey_walk2用于walk
  • playerGrey_up1playerGrey_up2用于up

添加动画帧

在godot编辑器2D面板中观察,图片相对窗口来说有点过大,需要缩小它们。点击AnimatedSprite2D节点,在检查器Node2D标签中,将Scale属性设置x = 0.5, y = 0.5

修改AnimatedSprite2D的scale

Player节点添加CollisionShape2D子节点,用来确定Player的碰撞范围。选中CollisionShape2D,在检查器Shape属性选择CapsuleShape2D

选择CapsuleShape2D

2D场景编辑器面板中使用两个控制柄,调整到合适的大小。

调整CapsuleShape2D大小

这时,你的场景面板中应该像这样:

微信图片_20260128142559_41_27.jpg

警告已经消失,点击场景->保存,或者使用ctrl + s保存player.tscn场景。

参考

  1. 你的第一个 2D 游戏 — Godot Engine (4.5) 简体中文文档
  2. godot-rust(gdext)创建项目 - 掘金
  3. godot - Rust
  4. demo-projects/dodge-the-creeps at master · godot-rust/demo-projects · GitHub