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

2024-04-15 17:20

本文主要是介绍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]]

对于同级节点依然生效

这篇关于5.Godot节点和功能及Node节点属性分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/906436

相关文章

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

Java实现TXT文件导入功能的详细步骤

《Java实现TXT文件导入功能的详细步骤》在实际开发中,很多应用场景需要将用户上传的TXT文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用Java实现一个基本的TXT文件... 目录前言1. 项目需求分析2. 示例文件格式3. 实现步骤3.1. 准备数据库(假设使用 mysql

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于