1、项目设置
新建一个全新的空项目,然后创建一个 Sprite2D 节点

Sprite2D 节点需要一个贴图来显示,在检查器中,找到 Texture 属性,将 icon.svg 拖到 Texture 属性上

然后,拖动节点到视口中央

2、新建脚本
右键场景面板中的 Sprite2D 节点,选择“添加脚本…”创建并将脚本附加到该节点上

此时,弹出窗口,将模板选择为 Object: Empty

此时,创建了一个 sprite_2d.gd 脚本文件

extends Sprite2D
每个 GDScript 文件都是一个隐含的类,extends 关键字定义了这个脚本所继承或扩展的类
根据这里的代码,意味脚本将获得 Sprite2D 节点所有的属性和方法
继承的属性包括在检查器中能够看到的属性,将鼠标悬停在检查器的属性上,可以看到其描述以及在代码中对应的标识符

3、Hello World
extends Sprite2D
func _init():
print("Hello, World!")
使用 func 关键字定义了一个名为 _init 的新函数,这是类构造函数的一个特殊名称
如果定义了这个函数,引擎会在内存中创建每个对象或节点时调用 _init()
GDScript 是基于缩进的语言,需要注意编写时的代码缩进
使用 F6 运行当前的场景,在输出选项卡里会显示输出的结果

4、四处旋转
需要向脚本添加两个成员变量:移动速度(像素/秒)和角速度(弧度/秒)
var speed = 400 # 速度
var angular_speed = PI # 角速度
为了移动图标,需要在游戏循环中每一帧更新其位置和旋转,使用 Node 类中的虚函数 _process()
如果在任何继承 Node 类的类中定义这个函数,Godot 引擎将在每一帧中调用该函数,并传递给它一个名为 delta 的参数(从上一帧开始经过的时间)
func _process(delta: float):
rotation += angular_speed * delta
以 _ 开头的函数的,按照约定是 Godot 的虚函数,也就是可以覆盖的与引擎通信的内置函数
rotation += angular_speed * delta 表示的是每一帧的旋转增量,rotation 是 Sprite2D 继承 Node2D 的属性,可以控制节点的旋转,以弧度为单位

5、前进
定义一个局部变量,用于表示方向和速度的 2D 向量
Vector2.UP 这个向量向上,调用 Vector2 的 rotated() 方法可以将其进行旋转
var velocity = Vector2.UP.rotated(rotation) * speed
position += velocity * delta

6、完整脚本
extends Sprite2D
var speed = 400
var angular_speed = PI
func _process(delta: float):
rotation += angular_speed * delta
var velocity = Vector2.UP.rotated(rotation) * speed
position += velocity * delta