1、项目设置

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

image.png

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

image.png

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

image.png

2、新建脚本

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

image.png

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

image.png

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

image.png

extends Sprite2D

每个 GDScript 文件都是一个隐含的类extends 关键字定义了这个脚本所继承或扩展的类 根据这里的代码,意味脚本将获得 Sprite2D 节点所有的属性和方法

继承的属性包括在检查器中能够看到的属性,将鼠标悬停在检查器的属性上,可以看到其描述以及在代码中对应的标识符

image.png

3、Hello World

extends Sprite2D

func _init():
	print("Hello, World!")

使用 func 关键字定义了一个名为 _init 的新函数,这是类构造函数的一个特殊名称 如果定义了这个函数,引擎会在内存中创建每个对象或节点时调用 _init()

GDScript 是基于缩进的语言,需要注意编写时的代码缩进

使用 F6 运行当前的场景,在输出选项卡里会显示输出的结果

image.png

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 表示的是每一帧的旋转增量,rotationSprite2D 继承 Node2D 的属性,可以控制节点的旋转,以弧度为单位

screen002.gif

5、前进

定义一个局部变量,用于表示方向和速度的 2D 向量 Vector2.UP 这个向量向上,调用 Vector2rotated() 方法可以将其进行旋转

var velocity = Vector2.UP.rotated(rotation) * speed
position += velocity * delta

screen003.gif

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