update godot version to 4.2

pull/3/head
godotg 2023-11-18 12:26:10 +08:00
parent 33f5a7b3b5
commit 14fb83fa49
15 changed files with 70 additions and 87 deletions

View File

@ -16,6 +16,7 @@
- 右侧面分栏具体包括:
1. 属性Inspector显示了场景分栏中所选节点的属性。
2. 节点Node显示了与当前场景分栏中所选节点对应的一些“信息”。
3. 历史记录History对场景的操作记录
### 中间面板:
@ -53,7 +54,7 @@ Audio音频素材 ( *.mp3)
- 场景视图Scene 即场景编辑器窗口默认地创建了一个场景empty
- 鼠标滚轮 :放大/缩小视图
- 鼠标键拖拽:平移视图
- 鼠标键拖拽:平移视图
- 网格每一个大网格包括8*8的小网格每个小网格8个像素
@ -179,6 +180,9 @@ Scale Mode 对象的缩放
# 8. 智能对齐Snap和锁定节点
- 智能对齐Smart Snap
```
godot 4.x 版本可以按住ctrl会临时打开智能
```
- 网格对齐Grid Snap
- 锁定节点,使其不能移动
- 子节点不可选中

View File

@ -26,7 +26,7 @@ Sprite用来显示一张图片再给Sprite增加一个刚体
![Image text](image/node2d-01.JPG)
```
1. Pause Mode节点的暂停
1. Process Mode节点的暂停
get_tree().paused = true
节点的三种可能状态有:
@ -56,6 +56,9 @@ func _process(delta):
pass
```
- https://github.com/godotengine/godot-proposals/issues/6424
# 3. CanvasItem节点
- CanvasItem节点CanvasItem -> Node
@ -92,16 +95,22 @@ Transform Node2d节点的基本属性在后面的脚本编程中Transfo
- 创建GdScrip脚本叫MyNode继承Node2D节点并自定义节点的icon
```
@icon("res://icon.svg")
extends Node2D
class_name MyNode, "res://icon.png"
class_name MyNode
func _ready():
print("my custom node")
pass
```
- 编写脚本,定义变量,编写代码
```
export var a = 1
export var b:String
@export var a: int = 1
@export var b: String
```
- 保存,如果不保存无法看到我们创建到的节点,这一点需要特别注意

View File

@ -67,23 +67,17 @@ z=x+y
# 5.导出变量
- export关键字可以让变量在编辑器中编辑
- @export关键字可以让变量在编辑器中编辑godot编辑器里的文档中有详细的用法
```
# 导出一个数字
export var a = 1
@export var a = 1
# 导出一个节点路径
export var b:NodePath
# 导出一个节点路径,不同的写法
export(NodePath) var c
@export var b:NodePath
# 导出一个文件路径
export(String, FILE) var e
@export_file var sound_effect_path: String
# 导出一个文件路径以txt结尾
export(String, FILE, "*.txt") var d
# 导出一个资源文件路径
export(Resource) var f
# 导出一个颜色
export(Color, RGB) var g
@export_file("*.txt") var notes_path: String
```
# 6.函数
@ -257,12 +251,18 @@ func dictionaryIterator():
# 12. 静态变量和静态方法
- const变量(静态变量)
- const常量
```
const ANSWER = 42
```
- 静态变量,常量和静态变量不是一个东西,有区别的
```
static var my_static_field = 42
```
- 静态方法
```
@ -293,6 +293,8 @@ class Animal:
pass
```
- 使用super关键字调用父类方法
# 14. 调试
- 在编写 GdScript 时,如果没有调试工具将是一件很痛苦的事情。

View File

@ -1,8 +1,8 @@
# 1. 内存管理free
- godot中的对象分为两种
- 引用计数对象继承于Reference,当没有引用时会被自动回收
- 非引用计数对象没有继承于Reference,自能自己手动回收,free或queue_free
- 引用计数对象继承于RefCounted,当没有引用时会被自动回收
- 非引用计数对象没有继承于RefCounted,自能自己手动回收,free或queue_free
- 在godot中移除一个节点并不会从节点中删除必须手动调用free或queue_free
@ -15,6 +15,7 @@
![Image text](image/gc3.png)
- GdScript没有垃圾回收虽然有着内存泄露的风险但是也保证了性能
- 类似于C++的智能指针
# 3. 引用计数算法

View File

@ -12,6 +12,19 @@
特定节点可以具有任意数量的子节点,但只能有一个父节点。
```
- Godot的场景树Scene Tree是一种用于组织和管理游戏或应用程序场景的数据结构。它是一个树状结构类似于DOM树但是每个节点都是场景Scene或节点Node
```
每个场景都可以包含其他节点作为子节点,这些子节点可以是其他场景、节点或特定功能的节点类型,例如精灵、物理对象、碰撞体等。
这种层级结构的组织方式使得开发者可以很方便地组织和管理游戏场景的各个元素。
通过场景树,开发者可以很容易地管理和操作场景中的对象,比如添加、删除、查找节点,以及设置节点的属性、监听事件等。
场景树也提供了一个机制,允许开发者以树的形式对游戏中的场景进行层级设计,例如在一些游戏中,玩家可以通过进入不同的房间或地图来切换场景。
Godot的场景树还提供了一些便利的特性如自动管理节点的生命周期、自动调用节点的特定方法、自动处理碰撞和物理模拟等。
这使得开发者可以更加专注于游戏的逻辑和功能实现,而无需过多关注底层的实现细节。
总之场景树是Godot引擎中用于组织、管理和操作游戏场景的一种数据结构它提供了一套高效、灵活的机制可以帮助开发者构建各种类型的游戏和应用程序。
```
![Image text](image/scene-tree.png)
# 2. 帧率
@ -24,7 +37,7 @@
FPS = 60, 约 16.7ms 秒更新一次
通过代码可以设置,要求 godot 引擎尽量以此帧率运行 ,但实际帧率还是会有偏差
Engine.target_fps = 120
Engine.max_fps = 120
```
![Image text](image/场景循环.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/yield.JPG-89a6f81a6f048deba903ba89a4540728.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://doc/demo04_signal/image/yield.JPG"
dest_files=[ "res://.import/yield.JPG-89a6f81a6f048deba903ba89a4540728.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

View File

@ -24,7 +24,7 @@ func _on_Button1_pressed():
```
# 第二种信号接受方法,通过代码控制信号的接收,更加的灵活,比较推荐方式
func _ready():
$Button2.connect("pressed", self, "onButton2")
$Button2.connect("pressed", Callable(self, "onButton2"))
func onButton2():
print("button2 pressed")
@ -50,44 +50,28 @@ emit_signal("mySignal", 1, 2)
disconnect("mySignal", 1, 2)
```
# 3. 异步回调yield
# 3. 异步await
- yield, to produce a result, answer, or piece of information立即结束当前函数调用无需等待
- await + 对象.信号
```
其本质,就是能让一个函数在执行过程中暂停(挂起),然后在接收到恢复指令以后继续执行的机制。
```
- 1.消息接受支持异步操作
![Image text](image/img.png)
- yield(obj, signal),函数立即返回,并且保存当前执行的位置和状态
```
GDScriptFunctionState yield( Object object=null, String signal="" )
```
- yield返回GDScriptFunctionState类型对象类似于Java的CompleteFuture
```
GDScriptFunctionState 是记录一个协程状态的对象,实际上它就代表(引用)着该协程。
```
- resume恢复GDScriptFunctionState保存的调用函数状态
![Image text](image/yield.JPG)
- yield的三种用法
1. yield()和resmue()组合yield()来挂起用resmue()来恢复
2. yield(对象,信号S)的形式,把这个协程(即 GDScriptFunctionState注册为 节点N上信号S的接收者当 节点N发出信号S以后函数会恢复执行。
3. yield(协程对象C,"completed")的形式协程失效即GDScriptFunctionState的is_valid为false以后它会释放一个"completed"信号,用这个信号恢复上一层协程。
- 2.主动注册消息的接受
![Image text](image/img_1.png)
![Image text](image/img_2.png)
# 4. 多线程
- 什么是进程?
```
电脑中有时会有很多单独运行的程序每个程序有一个独立的进程而进程之间是相互独立存在的。比如QQ、浏览器
```
- 什么是线程?
```
进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。
```

View File

@ -24,7 +24,7 @@
- angular velocity旋转速度
- applied forces施加的力
- torque扭矩
- damp衰减系数值越大物体移动越慢可以用来模拟空气摩擦力等效果。
- damp衰减系数阻尼,值越大物体移动越慢,可以用来模拟空气摩擦力等效果。
# 3. 刚体实战

View File

@ -39,6 +39,11 @@ The descendant nodes will then move accordingly when setting an offset in this n
# 4. Tilemap 节点
- tilemap在godot 4.x中的用法
- https://www.bilibili.com/video/BV1cR4y1Z7Pq/?spm_id_from=333.999.0.0&vd_source=4f3b881aea002f58e78c896adbef428d
- https://www.bilibili.com/video/BV1bd4y1x7dP/?spm_id_from=333.788&vd_source=4f3b881aea002f58e78c896adbef428d
- tilemap的由tileset组成tileset由tile一个个单个图块组成
- 基本上通过熟练使用get_cell、set_cell、world_to_map这些函数就可以解决大多数普通关卡制作需求

View File

@ -47,12 +47,9 @@ autostart :自动开始,载入场景后计时,也可以使用 start 方法
- 渐变节点使用非常简单方便,可以对一个物体的任意属性进行动画控制,当然,也可以同时处理多个动画对象。其主要方法有以下几个:
```
repeat :是否重复
start() :开始渐变,结束后触发 tween_completed 信号
interpolate_property() :设置进行动画的节点属性以及时长等,需要传递属性名称、开始结束值、时长等参数
这里最重要的方法是 interpolate_property() ,可以在 Godot 编辑器中按 F4搜索 Tween 类进行查看。
当然,和 Timer 节点一样我们完全可以在代码中动态创建Tween 对象。
var tween: Tween = tween = create_tween()
# 无限循环动画
tween.set_loops()
Smoothly animates a node's properties over time.

View File

@ -9,6 +9,7 @@
# 2. 法线贴图NormalMap
- 在godot4中需要在Sprite2D中选择CanvasTexture才能够看到法线贴图
- 法线贴图的定义
```
@ -40,6 +41,7 @@
# 3. 光照和阴影LightOccluder2D
- 光照是指光的照射godot 中光照的实现模拟了光对真实世界的影响。在场景中添加光源可以使场景产生相应的光照和阴影效果,获得更好的视觉效果。
- 在godot4中光线分为两个点光源PointLight2D和全局光源DirectionalLight2D
![Image text](image/light_shadow_main.png)