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 |
|
rotate()
函数让 sprite 旋转:
1 |
|
这里的 0.3
是弧度值.
1 |
|
使用 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 |
|
加类型如:
1 |
|
7. Introduction to Member Variables
1 |
|
实际上是升高这个 entity 的 rotation 成员变量.
Accessing sub-variables with the dot
很多 Member variables 有 sub-values, 用 .
来使用.
如,调整 entity 的位置:
1 |
|
调整 entity 的大小:
1 |
|
8. Defining Your Own Variables
使用 var
关键字:
1 |
|
重复定义会报错.
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 |
|
这就使得旋转的角度是和时间相关的函数,时间肯定是均匀变化的,因此旋转的角度也是匀速的, 如果不这样写,因为处理每一帧所花的时间不同,转动相同角度所花的时间就会不同,会造成不匀速变化.
12. Using Variables to Make Code Easier to Read
在函数中定义的变量只能在函数中使用.
13. Conditions
if
语句:
1 |
|
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 |
|
其和:
1 |
|
等价.
Vector2()
被称作构造函数.
Using vectors to change the position
17. Introduction to While Loops
如:
1 |
|
18. Introduction to For Loops
如:
1 |
|
range(3)
返回的是 [0, 1, 2]
, 范围是 0 ~ n-1
array
如:
1 |
|
19. Creating arrays
用数组来存储路径,如:
1 |
|
20. Looping over arrays
如:
1 |
|
in
关键词可以确定一个元素是否在数组中:
1 |
|
append()
函数在数组后面加上一个元素:
1 |
|
21. Strings
和 C 语言一样,Strings 本质上还是数组:
1 |
|
22. Functions that return a value
使用 round()
函数,可以将小数截尾:
1 |
|
lerp()
(linear interpolate) 函数.
使用 return
关键字返回值.
23. Appending and poping values from arrays
数组的三个成员函数:
append()
pop_front()
pop_back()
可以用 print
直接输出数组内容:
1 |
|
判断数组是否为空可以:
1 |
|
24. Accessing values in arrays
访问数组时可以有负数的 index 如:
1 |
|
You can’t access non-existent indices
无法访问不存在的 index.
可以用 size()
成员函数来获取数组的长度.
25. Creating Dictionaries
如:
1 |
|
每一个 key 必须唯一.
Dictionaries 也被叫做 mappings 或者 associate arrays.
Dictionaries 使用 Hash 算法,Hash 算法 convert one value into another. 我们提供一个 key, 这个 key 被用于计算一个 Hash 值,然后用这个 Hash 值当作 index 来访问对应的元素. 本质上还是数组,只不过 index 为 Hash 值.
访问:
1 |
|
26. Looping over dictionaries
两个成员函数:
keys()
values()
其返回数组.
27. Value types
可以用 +
来连接两个字符串:
1 |
|
类型转换:
1 |
|
转换为字符串.
同样有:
int()
float()
28. Specifying types with type hints
如:
1 |
|
也可以写成:
1 |
|