Godot学习笔记

Godot使用的语言——GDScript

GDScript总体上类似于Python,该说是简单?or 优美?or 不清晰?

在Python基础上有下列不同:

变量类型动态,在声明时不需声明类型

使用var声明变量,const声明常量

静态声明

当然也可静态声明,在声明变量名后加 :变量类型

1
2
3
4
5
var my_var = 15
my_var - "Hello, World!"

var num:int = 15;
var num := 15 #自动推断

数组以[]包括,字典与枚举用{}包括

函数

定义函数
1
2
3
4
5
6
7
func sum(a, b):
...
return a + b

func sum(a:int, b:int) -> int:
...
return a + b

初始化
1
2
3
func _init() -> void:
...
#内使用self参数
使用extends继承
多态正常用
属性的setter/getter
1
2
3
4
5
6
7
8
9
var _count: int
var count: int:
get:
return _count
set(value):
if value < MAX_COUNT:
return
else:
_count = value
继承树转换

可用as将以确定的父类转为子类

鸭子类型

不标注类型,但在敲代码时确保类似多态的进行。

编程语言会无视对象具体所属类型,在运行时直接在对象上尝试访问指定的成员——只要他有

如果一个东西像鸭子一样走路,会嘎嘎叫,那它就是鸭子

内部类的宣传:)

gd脚本内创建的类都为内部类,为使其他脚本也能使用,可用class_name取外部名字

标签们

@onready

让右侧变量在reandy运行,准备好后再进行赋值

@export

使得变量能在游戏窗口中更改编辑

Godot常用功能

CanvasItem

1
2
3
4
5
this.Visible    //是否显示

this.ZIndex

this.ZASRelative //渲染顺序

Node2D

1
2
3
4
5
6
7
8
9
10
11
this.Position    //位置

this.Rotation

this.RotationDegrees //旋转

this.Scale //缩放

this.Skew //倾斜

LookAt(Vector2 vec) //看向某个点

Sprire2D

1
2
3
4
5
6
7
8
9
this.Texture = GD.Load<Texture2D>(path)    //加载纹理

this.Centered //中心点是否为左上角

this.Offset //锚点偏移量

this.FlipH

this.FlipV //翻转

分组

1
2
3
4
5
this.GetTree().GetNodesInGroup(group_name)   //获取分组中的节点  

this.GetTree().CallGroup(group_name, func_name) //调用节点中所有脚本的方法

this.AddToGroup(group_name) //将自身添加至分组

信号

1
2
3
4
5
6
this.Connect(signal_name, new Callable(this, func_name))   //动态连接信号

[Signal]
public delegate void MySignalEventHandler(); //定义信号

EmitSignal(Signal_name) //发射信号

RigidBody2D

1
2
3
4
5
this.LockRotation    //锁定旋转
this.ContactMonitor = true;
this.MAxContactReported = 1; //开启碰撞检测

this.LinearVelocity //速度

Json存储数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//示例哈
//要创建一个内容为{"user":[{"name":"A", "hp":100}, {"name":"B", "hp":200}]}的Json文件

//创建Json
Dictionary user1 = new Dictionary();
Dictionary user2 = new Dictionary();
user1["name"] = "A";
user1["hp"] = 100;
user2["name"] = "B";
user2["hp"] = 200;
var users = new Godot.Collections.Array{user1, user2};
Dictionary dic = new Dictionary();
dic["user"] = users;
string json = Json.Stringify(dic);

//解析Json
Dictionary newDic = Json.ParseString(json).AsGodotDictionary();
var newUsers = newDic["user"];