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先执行

对于同级节点依然生效

相关推荐
watermelonoops1 小时前
Deepin和Windows传文件(Xftp,WinSCP)
linux·ssh·deepin·winscp·xftp
hackeroink1 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
疯狂飙车的蜗牛2 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
迷雾漫步者2 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-3 小时前
验证码机制
前端·后端
燃先生._.4 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
远游客07134 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<4 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟4 小时前
centos-stream9系统安装docker
linux·docker·centos