5.Godot节点和功能及Node节点属性分析

1. 节点和功能的关系

  • 节点 Node ,用于实现一种功能,例如,Sprite 节点,用于图片的显示

  • 一个节点的功能取决于它挂载了哪些子节点,它包含了哪些功能的子节点,就包含了对应子节点表示的功能

  • 节点是可选的,可以添加、可以删除,就代表添加哪些功能,删除哪些功能

  • 先创建一个空的节点,再选择需要的节点

    有一个player节点,给player节点挂载一个sprite节点,用来显示一张图片
    再挂载一个rigidbody2d节点,把它表示成一个刚体的节点,给player赋予刚体的功能

  1. 先把node2d更改类型

在下面挂载一个node2d节点,命名为player

  1. 再挂载一个图片,说明这个节点是有图片要显示的
  2. 给player增加一个刚体的功能,继续添加子节点
  1. 这里提示需要再添加一个碰撞体
  1. 提示需要给碰撞体选择一个形状

  2. 在右边选择一个长方体的样式

  3. 再添加一个remotetransform2d

    把它关联到刚才的sprite节点

现在就给player添加了一个刚体的功能

运行这个场景,就会发现player节点会下落

在场景中鼠标左键按住,从右下往左上划,选中player中的所有结点,然后可以拖动改变位置

如果不想要这个功能了,可以删除rigidbody2d节点

在Godot中所有的操作都是基于节点的,节点就是功能,功能就是节点

2. Node节点

  • Node节点,是基类节点,所有节点都会继承Node节点,所以其它类型都包含Node节点的功能
  • Node节点是最核心的节点,所有其他类型节点都是由Node节点派生出来的

当新建一个场景的时候,会默认创建一个node2d节点

把它改变成node节点

1. Editor Description

在右边检查器里面,node节点第一个功能是可以往里面写描述,相当于注释

2. Script

node节点最主要的功能就是可以挂载脚本

Script的属性就是挂载脚本

左上角这里点击创建脚本,会自动挂载到node节点上

点击添加脚本

输入print("hello")

点击运行当前场景,发现控制台输出了一个hello

刚才添加的脚本会把脚本的属性赋值给Script

可以点击解除脚本

或者在右边的检查器node属性里面切换Script属性解除脚本

还可以将脚本拖到Script属性这里添加脚本

这些操作都可以实现

挂载好脚本以后,就可以在脚本里面写自己的逻辑

脚本基础函数介绍

_ready函数,脚本初始化会首先调用这个方法,会在_process()这个函数之前调用,就相当于main函数,一个初始化函数
_process函数,每一帧都会调用这个函数,因为游戏是一帧一帧渲染到屏幕上的,每渲染一帧都会自动调用这个函数,可以在这个函数里面写一些游戏逻辑,也就是写逻辑的时候主要用的函数

在这里定义了一个变量,每一帧就把这个变量加1

每60帧输出一个日志

复制代码
extends Node

# 脚本初始化会首先调用这个方法,会在_process()方法之前调用
func _ready():
	# get_tree().paused = true
	print("hello")
	pass

var count = 0
# 每一帧都会调用这个方法
func _process(delta):
	count = count + 1
	
	if (count % 60 == 0):
		print("node")
	pass

运行这段代码

每60帧相当于大概1秒钟,可以观察到脚本的执行顺序

这两个函数是脚本最主要的函数,也是用的最多的函数

3. Process Mode

现在一共有三个node节点

在parentnode和childnode的脚本里面都添加上面的输出hello和node的代码

parentnode里输出parentnode,childnode里输出childnode

先默认运行

先会输出parent再输出child,也就是节点的process的执行顺序

因为parent节点是在最上面的,采用深度优先遍历的规则,就会先执行parent的process函数,执行结束以后,再执行child的process函数

当游戏暂停的时候会发生什么呢

先把child脚本的ready函数删除,保留parent节点的ready函数

不对mode进行改变

运行场景

parent先输出,child后输出

processmode主要是控制process函数

就是控制process函数在暂停的时候,是否去执行

  1. 现在child设置成inherit,parent设置成disabled
    get_tree().paused = true
    ready函数里的这条语句的意思是
    这条代码执行过后,就会把游戏暂停掉

节点的三种可能状态有:

  1. Inherit(继承) :处理与否取决于父、祖父等等节点中第一个非 Inherit 状态的节点。

  2. disabled(停止) :无条件停止节点(以及 Inherit 模式的子节点)。暂停时该节点不会进行处理。

  3. always(处理) :无条件处理节点(以及 Inherit 模式的子节点)。无论暂停与否,该节点都会进行处理。

  4. parent选择disabled模式
    运行了ready里的停止游戏语句后
    不会运行process函数,控制台不会打印任何东西

选择always模式

控制台会继续先打印parent后打印child

  1. parent选择disabled,child选择always

    理论上只有子节点会输出日志

  2. parent选择always,child选择disabled

    这时只有父节点会输出日志

4. Process Priority

process函数执行的优先级,对于子节点依然有效

遍历的顺序可以通过process函数的优先级来改变

这个process priority

这个优先级是里面的数字越小,优先级越高

把parent的优先级调到100,child的优先级调成1

理论上是childnode先执行

对于同级节点依然生效

相关推荐
胡斌附体8 分钟前
linux测试端口是否可被外部访问
linux·运维·服务器·python·测试·端口测试·临时服务器
愚润求学17 分钟前
【Linux】自旋锁和读写锁
linux·运维
大锦终18 分钟前
【Linux】常用基本指令
linux·运维·服务器·centos
IT项目管理29 分钟前
达梦数据库DMHS介绍及安装部署
linux·数据库
慧一居士35 分钟前
<script setup>中的setup作用以及和不带的区别对比
前端
知北游天43 分钟前
Linux:多线程---深入互斥&&浅谈同步
linux·运维·服务器
Gappsong8741 小时前
【Linux学习】Linux安装并配置Redis
java·linux·运维·网络安全
RainbowSea1 小时前
NVM 切换 Node 版本工具的超详细安装说明
java·前端
读书点滴1 小时前
笨方法学python -练习14
java·前端·python
Mintopia1 小时前
四叉树:二维空间的 “智能分区管理员”
前端·javascript·计算机图形学