Learn-GDScript-官方教程

1. What Code is like

GDScript 的语法和 Python 类似,也是用缩进判断层次, 代码块用 : 开始.

2. Your First Error

注释符是 #.

3. We Stand on the Shoulders of Giants

调用 show() 函数让 something visible, 调用 hide() 隐藏这些 entity.

使用 func 关键词定义函数:

1
2
func run():
hide()

rotate() 函数让 sprite 旋转:

1
2
func run():
rotate(0.3)

这里的 0.3 是弧度值.

1
degrees = radians * 180 / PI

使用 move_local_x() 函数,可以让 character 左右移动.

move_local_y() 函数可以让 sprite 上下移动.

注意 2D 游戏设计中的坐标系是左上角为原点.

4. Drawing a Rectangle

Meet the turtle

三个函数:

  • move_forward(pixels), 向前移动
  • turn_right(degrees), 向右转
  • turn_left(degrees)

5. Coding Your First Function

在编程中不说 “names” 而是说 “identifiers”.

使用函数主要是为了复用.

命名习惯:

  • move_forward()
  • moveForward()

Instantly moving the turtle to a different position

使用 jump(x,y) 函数. 不会划线.

6. Your First Function Parameter

GDScript 中定义函数时的参数只有参数名,可以不加类型, 如:

1
2
func rotate(radiations):
...

加类型如:

1
2
func rotate(radiations: float):
...

7. Introduction to Member Variables

1
2
func run():
rotate(0.3)

实际上是升高这个 entity 的 rotation 成员变量.

Accessing sub-variables with the dot

很多 Member variables 有 sub-values, 用 . 来使用.

如,调整 entity 的位置:

1
2
3
func run():
position.x = 180
position.y = 120

调整 entity 的大小:

1
2
3
func run():
scale.x = 1.5
scale.y = 1.5

8. Defining Your Own Variables

使用 var 关键字:

1
var health

重复定义会报错.

9. Adding and Subtracting

10. The Game Loop

11. Time Delta

每一个游戏脚本都包含 _process(delta) 函数.

FPS 就是 Frames Per Second, 一帧就是一幅图片, _process(delta) 就是更新图片. 每秒更新 60 次就是 60 帧.

Frames take varying amounts of time to calculate

delta 的意思是 a time difference.

delta 指代的是 Godot 处理 previous frame 的时间,单位是秒. 其值在处理每个 frame 时都会变化.

这个值要时刻考虑.

如:

1
2
func _process(delta):
rotate(2 * delta)

这就使得旋转的角度是和时间相关的函数,时间肯定是均匀变化的,因此旋转的角度也是匀速的, 如果不这样写,因为处理每一帧所花的时间不同,转动相同角度所花的时间就会不同,会造成不匀速变化.

12. Using Variables to Make Code Easier to Read

在函数中定义的变量只能在函数中使用.

13. Conditions

if 语句:

1
2
3
4
5
6
if condition:
...
else if condition:
...
else:
...

14. Multiplying

15. Modulo

取余只能作用于整数.

Using modulo to find even and odd numbers

Calculating a random number within a range

使用 randi() (random integer) 函数可以获得一个随机整数.

16. 2D Vectors

之所以 scale 变量有两个 sub-variables 是因为 scale 是一个 2 维向量 Vector2.

1
2
func level_up():
scale += Vector2(0.2, 0.2)

其和:

1
2
3
func level_up():
scale.x += 0.2
scale.y += 0.2

等价.

Vector2() 被称作构造函数.

Using vectors to change the position

17. Introduction to While Loops

如:

1
2
while number < 4:
print(number)

18. Introduction to For Loops

如:

1
2
for number in range(3):
cell += Vector2(1, 1)

range(3) 返回的是 [0, 1, 2], 范围是 0 ~ n-1

array

如:

1
var arr = [0, 1, 2]

19. Creating arrays

用数组来存储路径,如:

1
var turtle_path = [ Vector2(1,0), Vector2(1,1), Vector2(2,1), Vector2(3,1), Vector2(4,1), Vector2(5,1),   ]

20. Looping over arrays

如:

1
2
3
var numbers = [ 0, 1, 2 ]
for number in numbers:
print(number)

in 关键词可以确定一个元素是否在数组中:

1
2
if cell in cells:
...

append() 函数在数组后面加上一个元素:

1
selected_units.append(cell)

21. Strings

和 C 语言一样,Strings 本质上还是数组:

1
2
for character in "Robot":
print(character)

22. Functions that return a value

使用 round() 函数,可以将小数截尾:

1
var rounded_health = round(health)

lerp() (linear interpolate) 函数.

使用 return 关键字返回值.

23. Appending and poping values from arrays

数组的三个成员函数:

  • append()
  • pop_front()
  • pop_back()

可以用 print 直接输出数组内容:

1
2
3
4
5
var crates = ["sword", "shield", "gems"]

func run():
crates.pop_back()
print(crates)

判断数组是否为空可以:

1
2
3
4
var crates = ["sword", "shield", "gems"]

while crates:
...

24. Accessing values in arrays

访问数组时可以有负数的 index 如:

1
2
func run():
use_item(inventory[-2])

You can’t access non-existent indices

无法访问不存在的 index.

可以用 size() 成员函数来获取数组的长度.

25. Creating Dictionaries

如:

1
2
3
4
5
var dictionary = {
key1: value_1,
key2: value_2,
...
}

每一个 key 必须唯一.

Dictionaries 也被叫做 mappings 或者 associate arrays.

Dictionaries 使用 Hash 算法,Hash 算法 convert one value into another. 我们提供一个 key, 这个 key 被用于计算一个 Hash 值,然后用这个 Hash 值当作 index 来访问对应的元素. 本质上还是数组,只不过 index 为 Hash 值.

访问:

1
dictionary[key]

26. Looping over dictionaries

两个成员函数:

  • keys()
  • values()
    其返回数组.

27. Value types

可以用 + 来连接两个字符串:

1
print("Hello " + "there")

类型转换:

1
str(number)

转换为字符串.

同样有:

  • int()
  • float()

28. Specifying types with type hints

如:

1
var cell_size: Vector2 = Vector2(50.0, 50.0)

也可以写成:

1
var cell_size := Vector2(50.0, 50.0)

Learn-GDScript-官方教程
http://example.com/2022/11/12/Learn-GDScript-官方教程/
作者
Jie
发布于
2022年11月12日
许可协议