diff --git a/doc/demo03_lifecycle/image/owner01.png b/doc/demo03_lifecycle/image/owner01.png new file mode 100644 index 0000000..77447ab Binary files /dev/null and b/doc/demo03_lifecycle/image/owner01.png differ diff --git a/doc/demo03_lifecycle/image/owner01.png.import b/doc/demo03_lifecycle/image/owner01.png.import new file mode 100644 index 0000000..9d6dbcf --- /dev/null +++ b/doc/demo03_lifecycle/image/owner01.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/owner01.png-3d92fe1a6d5d29fa03c5310ffc95f2cf.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://doc/demo03_lifecycle/image/owner01.png" +dest_files=[ "res://.import/owner01.png-3d92fe1a6d5d29fa03c5310ffc95f2cf.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 diff --git a/doc/demo03_lifecycle/lifecycle.md b/doc/demo03_lifecycle/lifecycle.md index dfef509..517722a 100644 --- a/doc/demo03_lifecycle/lifecycle.md +++ b/doc/demo03_lifecycle/lifecycle.md @@ -104,3 +104,40 @@ var subNode4 = get_tree().root.find_node("SubNode2", true, false) ![Image text](image/physics.png) ![Image text](image/physics-1.png) +# 6. Parent和Owner + +- Parent + - 一个节点的Parent就是场景树上它的父级 + +- Owner + - 如果不修改默认Owner的话,可以把它视为节点所在场景的顶部节点,如果该节点本身就是顶部节点那么它的Owner为null + + +- 静态场景结构中默认的Owner + +![Image text](image/owner01.png) + +``` +extends Node + +class_name TestNode + +func _ready(): + var parent_name = "NULL" + var owner_name = "NULL" + if get_parent() != null: + parent_name = get_parent().name + if owner != null: + owner_name = owner.name + print(name + "'s parent is <" + parent_name + "> and it's owner is <" + owner_name + ">" ) + +``` + +``` +node_3's parent is and it's owner is +node_2's parent is and it's owner is +node_1's parent is and it's owner is +node_0's parent is and it's owner is +``` + +- 动态创建的节点的Owner是null \ No newline at end of file diff --git a/doc/demo04_signal/signal.md b/doc/demo04_signal/signal.md index 3d09109..1137bda 100644 --- a/doc/demo04_signal/signal.md +++ b/doc/demo04_signal/signal.md @@ -53,8 +53,28 @@ disconnect("mySignal", 1, 2) # 3. 异步回调yield - yield, to produce a result, answer, or piece of information,立即结束当前函数调用,无需等待 + +``` +其本质,就是能让一个函数在执行过程中暂停(挂起),然后在接收到恢复指令以后继续执行的机制。 +``` + - yield(obj, signal),函数立即返回,并且保存当前执行的位置和状态 + +``` +GDScriptFunctionState yield( Object object=null, String signal="" ) +``` + - yield返回GDScriptFunctionState类型对象,类似于Java的CompleteFuture + +``` +GDScriptFunctionState 是记录一个协程状态的对象,实际上它就代表(引用)着该协程。 +``` + - resume恢复GDScriptFunctionState保存的调用函数状态 -![Image text](image/yield.JPG) \ No newline at end of file +![Image text](image/yield.JPG) + +- yield的三种用法 +1. yield()和resmue()组合,yield()来挂起,用resmue()来恢复 +2. yield(节点对象N,信号S)的形式,把这个协程(即 GDScriptFunctionState)注册为 节点N上信号S的接收者,当 节点N发出信号S以后,函数会恢复执行。 +3. yield(协程对象C,"completed")的形式,协程失效(即GDScriptFunctionState的is_valid为false)以后,它会释放一个"completed"信号,用这个信号恢复上一层协程。