pull/2/head
jaysunxiao 2022-01-10 17:55:22 +08:00
parent d3155ed52b
commit e5c527f651
4 changed files with 103 additions and 2 deletions

View File

@ -1,5 +1,17 @@
# 1. 场景树 # 1. 场景树
- Nodes节点是在Godot中创建游戏的基本构建块。当一组节点被添加到树中时它被称为sence场景树被称为sence tree场景树
```
节点是可以表示各种专用游戏功能的对象。给定类型的节点可以显示图形播放动画或表示对象的3D模型。
该节点还包含一组属性,允许你自定义其行为。
你添加到项目中的节点取决于你需要的功能。
它是一个模块化系统,旨在为你提供构建游戏对象的灵活性。
在项目中,你添加的节点将组织为树结构。在树中,节点被添加为其他节点的子节点。
特定节点可以具有任意数量的子节点,但只能有一个父节点。
```
![Image text](image/scene-tree.png) ![Image text](image/scene-tree.png)
![Image text](image/场景循环.png) ![Image text](image/场景循环.png)
@ -32,13 +44,63 @@ Engine.target_fps = 120
# 3. 节点的生命周期 # 3. 节点的生命周期
- 在Godot中一个游戏的启动大致流程如下
```
Godot的main启动一个进程加载所需的驱动设备如渲染设备GL/GLES/Vulkan等、音频设备输入控制器设备等等
然后进入主循环加载一个自动创建的对象——SceneTree场景管理系统对象它用户管理场景图
这个对象包含一个RootViewPort节点它是一个Node该节点包含一个默认的ViewPort以便提供默认渲染的输出视口
当用户用Godot编辑器创建一个关卡或场景文件并设置默认的启动的场景文件Godot将该场景文件的根节点附加到RootViewPort节点上
当节点进入场景树SceneTree变为活动状态。
按场景树顺序依次回调各个子节点的_init()_ready()等声明函数。
```
![Image text](image/godot_process.jpg) ![Image text](image/godot_process.jpg)
![Image text](image/godot_node.jpg) ![Image text](image/godot_node.jpg)
![Image text](image/godot_lifecycle.jpg) ![Image text](image/godot_lifecycle.jpg)
# 4. process和physics_process # 4. 节点的获取方式
```
# 获取当前节点
var currentNode1 = $"."
var currentNode2 = self
# 获取父节点
var parentNode1 = get_parent()
var parentNode2 = $"../"
# 获取子节点
var subNode1 = $SubNode2
var subNode2 = $"SubNode2"
var subNode3 = get_node("SubNode2")
# 根节点查找法,会返回节点树从上到下找到的第一个节点
var subNode4 = get_tree().root.find_node("SubNode2", true, false)
```
# 5. process和physics_process
- 平时我们看到的动画,实际上是由很多静止的画面连续切换组成的
- 其中每个静止的画面我们都称为一帧比如60帧的动画就是一秒播放60个静止的画面组成的动画
- godot 的 _process 相当于 unity 的 Update
```
内部对代码就会在每一帧之前被执行,也就是引擎每渲染一幅的画面之前,都会执行它里面的代码
```
- godot 的 _physics_process 相当于 unity 的 FixedUpdate
```
内部的代码会在每个物理帧之前被执行,
因为godot的物理模拟是单独进行的每次进行物理模拟的时候如计算一个刚体小球的运动轨迹每进行一次计算我们就称为是一进行了一个物理帧
而每次进行物理模拟之前都会执行_physics_process中的代码
```
![Image text](image/process.png) ![Image text](image/process.png)
![Image text](image/process-1.png) ![Image text](image/process-1.png)
![Image text](image/physics.png) ![Image text](image/physics.png)
![Image text](image/physics-1.png) ![Image text](image/physics-1.png)

View File

@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://script/demo02_base/base4.gd" type="Script" id=1]
[node name="Node2D" type="Node2D"]
script = ExtResource( 1 )

View File

@ -0,0 +1,33 @@
extends Node2D
func _ready():
createNodeByScript()
pass
func createNodeByScript():
# new一个Sprite节点
var sprite = Sprite.new()
# 设置图片
var icon = preload("res://icon.png")
sprite.set_texture(icon)
# 修改名称
sprite.name = "mynode"
# 修改坐标居中
sprite.position.x = 200
sprite.position.y = 200
# 添加到当前的场景中
add_child(sprite)
pass # Replace with function body.
func _process(delta):
var sprite = $mynode
sprite.rotate(0.1)
pass

View File

@ -13,7 +13,7 @@ func _ready():
# that all children nodes have also entered the Scene Tree, # that all children nodes have also entered the Scene Tree,
# and became active. # and became active.
print("sub node1 _ready") print("sub node1 _ready")
nodeUsage() #nodeUsage()
func _exit_tree(): func _exit_tree():
# When the node exits the Scene Tree, this function is called. # When the node exits the Scene Tree, this function is called.