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

1. 节点和功能的关系

  • 节点 Node ,用于实现一种功能,例如,Sprite 节点,用于图片的显示
  • 一个节点的功能取决于它挂载了哪些子节点,它包含了哪些功能的子节点,就包含了对应子节点表示的功能
  • 节点是可选的,可以添加、可以删除,就代表添加哪些功能,删除哪些功能
  • 先创建一个空的节点,再选择需要的节点
有一个player节点,给player节点挂载一个sprite节点,用来显示一张图片
再挂载一个rigidbody2d节点,把它表示成一个刚体的节点,给player赋予刚体的功能

![[Pasted image 20240415140522.png]]

  1. 先把node2d更改类型
    ![[Pasted image 20240415140542.png]]

在下面挂载一个node2d节点,命名为player
![[Pasted image 20240415140632.png]]

![[Pasted image 20240415140720.png]]

  1. 再挂载一个图片,说明这个节点是有图片要显示的
  2. 给player增加一个刚体的功能,继续添加子节点
    ![[Pasted image 20240415140928.png]]

![[Pasted image 20240415140956.png]]

  1. 这里提示需要再添加一个碰撞体
    ![[Pasted image 20240415141050.png]]

![[Pasted image 20240415141107.png]]

  1. 提示需要给碰撞体选择一个形状
    ![[Pasted image 20240415141140.png]]

  2. 在右边选择一个长方体的样式
    ![[Pasted image 20240415141232.png]]

  3. 再添加一个remotetransform2d
    把它关联到刚才的sprite节点
    ![[Pasted image 20240415141332.png]]

现在就给player添加了一个刚体的功能
运行这个场景,就会发现player节点会下落

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

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

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

2. Node节点

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

当新建一个场景的时候,会默认创建一个node2d节点
把它改变成node节点

1. Editor Description

在右边检查器里面,node节点第一个功能是可以往里面写描述,相当于注释
![[Pasted image 20240415143048.png]]

2. Script

node节点最主要的功能就是可以挂载脚本
![[Pasted image 20240415143142.png]]

Script的属性就是挂载脚本
![[Pasted image 20240415143217.png]]

左上角这里点击创建脚本,会自动挂载到node节点上
![[Pasted image 20240415143341.png]]

点击添加脚本
![[Pasted image 20240415143428.png]]

输入print("hello")
点击运行当前场景,发现控制台输出了一个hello
![[Pasted image 20240415143603.png]]

刚才添加的脚本会把脚本的属性赋值给Script
![[Pasted image 20240415143759.png]]

可以点击解除脚本
![[Pasted image 20240415143813.png]]

或者在右边的检查器node属性里面切换Script属性解除脚本
还可以将脚本拖到Script属性这里添加脚本
这些操作都可以实现
挂载好脚本以后,就可以在脚本里面写自己的逻辑
![[Pasted image 20240415144406.png]]

脚本基础函数介绍

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

extends Node# 脚本初始化会首先调用这个方法,会在_process()方法之前调用
func _ready():# get_tree().paused = trueprint("hello")passvar count = 0
# 每一帧都会调用这个方法
func _process(delta):count = count + 1if (count % 60 == 0):print("node")pass

运行这段代码
![[Pasted image 20240415144957.png]]

每60帧相当于大概1秒钟,可以观察到脚本的执行顺序
这两个函数是脚本最主要的函数,也是用的最多的函数

3. Process Mode

![[Pasted image 20240415145504.png]]

![[Pasted image 20240415145658.png]]

现在一共有三个node节点
在parentnode和childnode的脚本里面都添加上面的输出hello和node的代码
parentnode里输出parentnode,childnode里输出childnode
![[Pasted image 20240415150045.png]]

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

当游戏暂停的时候会发生什么呢
先把child脚本的ready函数删除,保留parent节点的ready函数
不对mode进行改变
运行场景
![[Pasted image 20240415153035.png]]

parent先输出,child后输出

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

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

节点的三种可能状态有:
1. Inherit(继承) :处理与否取决于父、祖父等等节点中第一个非 Inherit 状态的节点。
2. disabled(停止) :无条件停止节点(以及 Inherit 模式的子节点)。暂停时该节点不会进行处理。
3. always(处理) :无条件处理节点(以及 Inherit 模式的子节点)。无论暂停与否,该节点都会进行处理。

  1. parent选择disabled模式
    运行了ready里的停止游戏语句后
    不会运行process函数,控制台不会打印任何东西
    ![[Pasted image 20240415154214.png]]

选择always模式
控制台会继续先打印parent后打印child

  1. parent选择disabled,child选择always
    理论上只有子节点会输出日志
    ![[Pasted image 20240415154248.png]]

  2. parent选择always,child选择disabled
    这时只有父节点会输出日志
    ![[Pasted image 20240415154346.png]]

4. Process Priority

process函数执行的优先级,对于子节点依然有效
遍历的顺序可以通过process函数的优先级来改变
![[Pasted image 20240415154551.png]]

这个process priority
这个优先级是里面的数字越小,优先级越高
把parent的优先级调到100,child的优先级调成1
理论上是childnode先执行
![[Pasted image 20240415154733.png]]

对于同级节点依然生效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在个人电脑上,本地部署llama2-7b大模型

文章目录 前言原理效果实现 前言 我想也许很多人都想有一个本地的ai大语言模型,当然如果能够摆脱比如openai,goole,baidu设定的语言规则,可以打破交流界限,自由交谈隐私之类的,突破规则,同时因为部署在本地也不担心被其他人知道,那最好不过了 那究竟有没有这样的模型呢? llam…

怎么修改图片大小?在线图片处理的方法介绍

在日常生活中,我们经常需要调整图片大小以适应不同的网络上传要求。不管是微信、QQ换头像背景图片,还是各种社交媒体相册,都需要对图片改大小,今天就介绍几个关于修改图片大小的方法,可以不用下载安装就能在线图片处理…

WIFI详解及周边拓展

一、WiFi协议简介 WiFi协议,也称为无线保真技术,是一种允许电子设备通过无线方式在局域网(WLAN)和互联网上进行通信的技术标准。WiFi协议是基于IEEE 802标准的子系列标准协议,由电气和电子工程师协会制定。随着移动设备…

准备全方面加速企业申办乙级风力发电-材料准备

为了全方面加速企业申办乙级风力发电资质的材料准备过程,可以遵循以下步骤和建议: 深入了解资质标准: 仔细研读最新的乙级风力发电资质标准文件,明确所需满足的各项条件,包括注册资本、人员配置、技术装备、工程业绩、…

Docker篇(一)— Docker介绍

目录 什么是Docker应用部署的环境问题Docker解决依赖兼容问题Docker解决操作系统环境差异 小结 什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往…

node.js 常用命令大全

在Node.js中,有一些常用的命令和工具,这些命令和工具可以帮助你在开发过程中进行代码管理、调试、依赖管理等操作。以下是一些常用的Node.js命令和工具: npm:Node.js的包管理工具,用于安装、卸载、更新和管理Node.js模…

没找到问题原因,再怎么debug也是白费

事情的经过 事情的经过是这样的:每天早上我都需要在开机后通过网页向某个服务器请求最新的信息,并基于返回的信息,继续后续的动作。但之前获取信息的过程全部是手动的,非常的麻烦。 自动化尝试 之前我一直想尝试写一个脚本&…

Java多线程的线程状态和线程池参数

一、线程状态 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。线程对象在不同的时期有不同的状态。Java中的线程状态被定义在了java.lang.Thread.State枚举类中,State枚举类的源码如下: publi…

计算机网络——应用层(2)FTP,DNS

一、FTP:文件传输协议 将文件传输到远程主机或从远程主机传输文件。C/S模式。server是远程主机。 1、控制连接与数据连接分开 客户端服务器通过端口21联系,使用TCP传输协议客户端通过控制连接获得身份确认客户端通过控制连接发送命令浏览远程目录收到…

ZL-099动物行为学视频分析系统

简单介绍: 动物行为学视频分析系统是一套通过视频摄像机和计算机,采用图像处理技术,自动跟踪和记录动物活动的通用型运动轨迹记录分析系统,可以应用在神经药理,学习记忆药理,药理和新药神经系统一般药理毒理…

STM32SPI通信外设并读写W25Q64

文章目录 前言介绍SPI外设SPI框图简化框图 时序主模式全双工连续传输非连续传输 软硬件波形对比硬件SPI读写W25Q64接线图代码规划代码实现 前言 本文介绍STM32中自带的SPI外设,在大容量产品和互联型产品上,SPI接口可以配置为支持SPI协议或者支持I2S音频…

前端实现自动获取农历日期:探索JavaScript的跨文化编程

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

Verilog语法——按位取反“~“和位宽扩展的优先级

前言 先说结论,如下图所示,在Verilog中“~ ”按位取反的优先级是最高的,但是在等式计算时,有时候会遇到位宽扩展,此时需要注意的是位宽扩展的优先级高于“~”。 验证 仿真代码,下面代码验证的是“~”按位取…

【canvas】canvas基础使用(七):绘制图像

简言 学习canvas如何绘制图片或视频。 绘制图像 给定一个图像,一般使用drawImage()方法绘制。 drawImage 绘制图像 Canvas 2D API 中的 CanvasRenderingContext2D.drawImage() 方法提供了多种在画布(Canvas)上绘制图像的方式。 语法&…

python连接mysql步骤

要在 Python 中连接 MySQL 数据库,你需要遵循以下步骤: 步骤 1: 安装 MySQL Connector/Python 首先,确保你的系统中已安装了 MySQL Connector/Python,这是 MySQL 官方提供的用于在 Python 中连接 MySQL 的驱动程序。你可以通过 …

为什么内存要对齐

1.硬件要求: 许多处理器和硬件架构对于特定数据类型的访问要求内存地址是对齐的。例如,某些处理器可能要求访问4字节整数的地址必须是4的倍数,否则可能会导致性能下降甚至错误。因为可能会导致额外的处理器周期用于处理未对齐的访问&#xff…

Swift中的类

在Swift中,类是一种复合类型,用于创建具有属性和方法的对象。它是面向对象编程的基本构建块之一。 以下是一个简单的类的示例: class Person {var name: Stringvar age: Intinit(name: String, age: Int) {self.name nameself.age age}fu…

四川易点慧电子商务抖音小店安全:护航您的在线交易之旅

在数字化浪潮席卷全球的今天,电子商务已经成为人们日常生活的重要组成部分。四川易点慧电子商务抖音小店作为新兴的电商平台,以其便捷、高效的特点吸引了众多消费者的目光。然而,随着网络交易的日益频繁,安全问题也日益凸显。本文…

揭秘!这些部门对六西格玛技术情有独钟

当下,企业为了提升产品质量、降低成本、提高效率,纷纷寻求先进的管理方法和技术手段。其中,六西格玛技术因其卓越的绩效改善能力,受到了众多企业的青睐。那么,哪些部门对六西格玛技术情有独钟呢?天行健六西…

如何使用Docker部署WPS Office服务并实现无公网IP远程处理文档表格

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本,通过…