godot-start/doc/demo04_signal/signal.md

82 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 1. 信号signal
- 信号是用来完成模块或功能之间通信的媒介,其实就是约定了一些方法的回调形式
- 设计模式上叫做观察者设计模式
```
1. 观察者和被观察者是抽象耦合的,解耦模块
2. 建立一套统一的触发机制
```
- Godot引擎官方建议在你的游戏开发中更多的使用信号来完成模块或功能间的通信
- 第一种使用方法
```
# 第一种信号接受方法,通过在场景中配置信号的接收方法
func _on_Button1_pressed():
print("hello button1")
```
- 第二种使用方法
```
# 第二种信号接受方法,通过代码控制信号的接收,更加的灵活,比较推荐方式
func _ready():
$Button2.connect("pressed", Callable(self, "onButton2"))
func onButton2():
print("button2 pressed")
```
# 2. 自定义信号
- 自定义信号
```
signal mySignal(a, b)
```
- 发送信号
```
emit_signal("mySignal", 1, 2)
```
- 解除绑定信号
```
disconnect("mySignal", 1, 2)
```
# 3. 异步await
- await + 对象.信号
- 1.消息接受支持异步操作
![Image text](image/img.png)
- 2.主动注册消息的接受
![Image text](image/img_1.png)
![Image text](image/img_2.png)
# 4. 多线程
- 什么是进程?
```
电脑中有时会有很多单独运行的程序每个程序有一个独立的进程而进程之间是相互独立存在的。比如QQ、浏览器
```
- 什么是线程?
```
进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。
```
- 那什么是多线程?提到多线程这里要说两个概念,就是串行和并行,搞清楚这个,我们才能更好地理解多线程。
- 串行,其实是相对于单条线程来执行多个任务来说的,比如下载一个文件要等到上一个文件下载完
- 并行,下载多个文件,开启多条线程,多个文件同时进行下载,这里是严格意义上的,在同一时刻发生的,并行在时间上是重叠的