【杂谈】Godot4.4 对象池(附脚本)

Godot Engine 学习笔记 脚本-创建 脚本-创建脚本建立场景添加脚本处理信号 脚本 在Godot3.0之前,编写游戏脚本的唯一选择是使用 GDScript。而现在,Godot官方支持四种语言,并且能够动态添加额外的语言! GDScript 简单,优雅,设计上为Lua、Python、Squirrel等语言用户所熟悉。 加载和编译速度飞快(blazingly fast)。 编辑器集成非常令人愉快,有节点、信号、其它场景相关项目的代码完... 阅读详情
AI摘要

该博客围绕Godot4.4对象池展开。以发射球游戏为例,球发射后1.5秒会被回收到对象池等待下次发射。还解释了对象池概念,它如同收纳盒,使用时取出、不用时放回,能避免游戏因内存不足卡死,最后提及有对象池脚本。

学博而后可约,事历而后知要。

一、展示

这是一个发射球的游戏,发射出的球每过1.5秒又被回收到对象池,等待玩家下一次发射。

请添加图片描述

二、什么是对象池

所以,对象池就像个收纳盒,用的时候,拿出来,不用的时候放回去。无论玩家在游戏中打死多少怪物,亦或者发射多少子弹,游戏都不会因为内存不够而卡死,因为玩家只是打死了同一批怪物,发射了同一批的子弹。

对象存在
池为空
禁用并重置
对象池
取出对象
激活对象
创建新对象
场景中使用
归还对象

三、对象池脚本

class_name ObjectPool
extends Node

# scene是对象池里面要放的东西,比如说子弹或者怪物
@export var scene: PackedScene
# 对象池
var object_pool: Array[Node2D]


# 把死亡的怪物或者到时间的子弹,添加到对象池
func add_to_pool(object: Node2D) ->void:
	object_pool.append(object)
	#彻底禁用整个节点及其子节点的所有处理逻辑(包括输入、_process、_physics_process 等)
	object.process_mode = Node.PROCESS_MODE_DISABLED
	object.hide()
	

# 从对象池中取怪物或者子弹出来
func pull_from_pool() ->Node2D:
	var object: Node2D
	if object_pool.is_empty():
		object = scene.instantiate() # 对象池里没对象就创建一个
	else:
		object = object_pool.pop_front() # 有就弹出对象池中的第一个对象
	
	object.process_mode = Node.PROCESS_MODE_INHERIT
	object.show()
	
	if not object.is_inside_tree():  # 确保已移出场景树的节点重新加入
		get_parent().add_child(object) # 根据需要自行修改在哪里放子节点!
	return object

节点:GODOT的构建块 目录 节点:GODOT的构建块 使用节点 场景 节点:GODOT的构建块 节点是在Godot中创建游戏的基本构建块。 节点是可以代表某种特殊游戏功能的对象。 给定类型的节点可能会显示图形,播放动画或表示对象的3D模型。 该节点还包含属性的集合,允许您自定义其行为。 您添加到项目中的哪些节点将取决于所需的功能。 这是一个模块化系统,旨在为您灵活地构建游戏对象。 使用节点 在编程的意义上,节点是对象。它们封装数据和行为,并且可以从其他节点继承属性。与其使用默认的建议,不如点击场景dock中的“添加 阅读详情

相关推荐

qurobullet:适用于Godot的功能强大的2D弹丸系统模块!

古龙 适用于Godot的功能强大的2D弹丸系统模块! qurobullet提供了一种在Godot中轻松创建和处理数千个可配置2D射弹的方法。 它可以处理大量子弹的繁重的生成,移动和碰撞检测,并为用户提供了设计值得子弹的模式的工具! 它由三个主要部分组成: BulletServer和BulletSpawner节点和BulletType资源。 BulletServer创建一个可配置的项目符号对象池(不是节点),控制它们的移动并报告其冲突。 子弹池不会增长,如果超载,则会回收最旧的子弹。 甲BulletSpawner通过将信号发送到一个计算各种布置在产卵子弹,而“产卵”子弹BulletServer含有的位置,方向,和BulletType期望。 它具有预览绘图系统,该系统显示子弹行进的位置和方向,从而简化了通过AnimationPlayer创建新图案的过程。 BulletType是用于存

一个简单的 Godot C# 对象池

这是一个及其简单的Godot对象池,而且还非常不安全。不过作为接触Godot的一些设计理念看来刚刚好。

m0_73087695的博客 953

微信内置浏览器抓包全攻略:从ADB配置到Chrome调试(附常见问题解决)

本文提供了一套完整的微信内置浏览器抓包与调试解决方案。从ADB工具的深度配置与稳定性连接开始,详细讲解了如何开启X5内核调试开关,并利用Chrome DevTools建立远程连接。文章重点剖析了Network面板进行网络请求抓取、性能分析和问题定位的实战技巧,并附带了设备连接失败、无网络请求等常见问题的排查指南,帮助开发者高效解决微信H5页面调试难题。

gitlab7runner的博客 543

Godot C#实现unity中的对象池功能

在游戏开发中,对象池技术通过复用已创建对象,显著降低高频创建/销毁操作带来的性能损耗。

weixin_60522978的博客 1474

【算法】图解A* 搜索算法

A* 算法是启发式搜索算法,是根据Dijkstra算法改进而来。 问题引入 如下图所示,S为起始(start)节点,G为目标(goal)节点。 节点之间连线是两点的路径长度,如A到E的路径长度c(A,E) = 9。 节点旁的h值时当前节点到达目标节点(G)的预估值,如h(A)=15, 表示从当前点A到达目标点G的估计路径长度为15,此处h(x)即为启发函数,启发函数的设计有很多方法,具体可......

zhuhua造轮子的博客 4万+

2024最新版Anaconda Navigator安装使用指南

本文简要介绍如何下载安装Anaconda Navigator最新版,以及如何使用Python内核搭载来完成应用程序开发。

jackson_lingua的博客 1万+

Unity Game FrameWork—模块使用—对象池分析

官方说明:提供对象缓存池的功能,避免频繁地创建和销毁各种游戏对象,提高游戏性能。除了 Game Framework 自身使用了对象池,用户还可以很方便地创建和管理自己的对象池。下图是Demo中用到的对象池,所有的实体以及UI都使用了对象池。Domo中已经有了实体Entity对象池,可以满足存储GameObject的需求,这里仅能满足我们的实体使用需求,当我们需要添加新的对象池而非依赖于实体时,由于对原理不了解,导致无从下手。下面我们通过实体对象池来分析一下框架的原理和思路。

qq_37619255的博客 1506

英飞凌 AURIX Development Studio工程移植到Hightec的方法

1. 软件简介 AURIX™ Development Studio是英飞凌针对AURIX TC2XX/TC3XX系列单片机推出了一款免费的软件,集成了iLLD库,内置Tasking compiler和Tasking Debugger,但这两个模块只能用于非商业用途,可供学习和试用。iLLD库是英飞凌为TC2XX和TC3XX Tricore系列单片机提供的底层驱动库,有完善的使用手册,和较好的移植性。 Hightec是一款可以用来开发Aurix系列单片机的编译器,有免费版,可商用,集成GCC编译器,可用UDE

weixin_42967006的博客 7136

[Godot] 事件总线与对象池

本文介绍了游戏开发中常用的两个工具:事件总线和对象池。事件总线采用订阅发布模式,通过类型安全的字典存储事件处理器,实现模块间解耦通信,需要注意取消订阅防止内存泄漏。对象池通过复用节点提升性能,提供获取和归还接口管理对象生命周期。文章给出了C#实现代码和使用示例,事件总线用于UI与游戏逻辑交互,对象池适用于频繁创建的投射物等对象。这两个工具可根据需求扩展,如对象池预热等功能,是游戏开发中的基础优化手段。

qq_58742026的博客 307

数学建模学习(121):Python实现模糊AHP(Fuzzy AHP)——从原理到实践

Python实现模糊AHP(Fuzzy AHP)

全栈川川 1541

《深入掌握PostgreSQL数据库》 - 专栏介绍和目录

本专栏系统讲解PostgreSQL数据库的全栈知识,涵盖基础入门到高级实战。内容分为语言基础与进阶、核心原理、高可用架构、性能优化、运维管理、扩展开发等多个模块。从安装配置、数据类型选择到窗口函数、CTE等高级特性,再到索引优化、执行计划分析等性能调优技巧,全面解析PostgreSQL的核心功能。同时深入探讨MVCC机制、WAL日志、并发控制等底层原理,并分享高可用架构设计、备份恢复等运维实践。适合各层次开发者系统学习PostgreSQL,掌握这一强大开源数据库的关键技术。

数据知道的博客 3451

【亲测免费】 Godot通用游戏框架——加速您的游戏开发流程

Godot通用游戏框架——加速您的游戏开发流程 1. 项目基础介绍 Godot-Common-Game-Framework 是一个开源项目,旨在为使用 Godot 游戏引擎的开发者提供一组实用节点和对象,以帮助实现多种常见功能。该项目主要使用 C# 编程语言,充分利用了 Godot 引擎的强大功能。 2. 项目核心功能 该项目包含以下核心功能: GameManager:一个单例节点,用于实现分屏...

gitblog_01021的博客 1358

手把手教你学Simulink——基于核能发电系统的场景实例:核电站汽轮机与发电机协调控制仿真

在核电机组中,汽轮机-发电机系统是将核能最终转化为电能的关键环节。与火电机组不同,核反应堆的热惯性大、功率调节慢,因此汽轮机的控制策略需与反应堆特性相匹配,实现安全、稳定、高效的能量转换。维持发电机输出功率/频率稳定(响应电网调度)调节汽轮机进汽压力(匹配一回路蒸汽供应)实现“堆-机协调控制”保障机组在启停、变负荷、甩负荷等工况下的安全性本教程将带你使用构建一个核电站汽轮机与发电机协调控制系统汽轮机调速系统(调门控制)建模发电机与电网接口建模(同步机)

MHD0815的博客 212

go之对象池

【代码】go之对象池。

一起coding,一起嗨。 1050

基于STM32的智能浇花系统毕业设计(全部资料)

摘要:本文设计了一种基于STM32单片机的智能浇花系统,集成了环境温湿度检测、土壤温湿度监测、LCD显示、Wi-Fi联网及手机APP远程控制等功能。系统通过传感器实时采集环境参数,自动控制水泵工作实现智能灌溉,同时支持用户通过手机APP远程监控和调节。论文详细阐述了硬件选型、软件设计及系统测试过程,验证了系统的稳定性和实用性。该设计为家庭园艺提供了智能化解决方案,具有节水高效、操作便捷等特点。关键词:STM32;智能灌溉;远程控制;环境监测;Wi-Fi通信。

3254968421的博客 1194

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Godot Engine内存管理策略:对象池与引用计数

你是否曾在游戏开发中遇到过性能波动、卡顿甚至崩溃的问题?这些问题往往与内存管理密切相关。Godot Engine作为一款功能丰富的跨平台游戏引擎,其内存管理机制直接影响游戏的稳定性和流畅度。本文将深入解析Godot的两大核心内存管理策略——引用计数与对象池,帮助你优化游戏性能,避免常见的内存问题。 读完本文,你将能够: - 理解Godot中引用计数的工作原理 - 掌握对象池技术的应用场景和实现方...

gitblog_00414的博客 1311

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[译]Godot系列教程六 - 简单的二维游戏

Pong Godot自带的Demo中有大量更复杂的示例,但这款叫“Pong”的游戏可以对2D游戏的基本特性做一个介绍。 静态资源 本文所用到的一些资源文件:http://files.cnblogs.com/files/x3d/pong_assets.zip 场景设置 考虑到兼容旧设备,该游戏的分辨率设置为 640x400像素,相关操作在项目设置中进行。默认背景色为黑色: 在场景面板中创建一个No...

weixin_33674437的博客 660

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

go语言基础-----22-----对象池使用

1 临时对象池 1、 sync.Pool类型值作为存放临时值的容器。此类容器是自动伸缩的,高效的,同时也是并发安全的。 2、sync.Pool类型只有两个方法: ◼ Put,用于在当前的池中存放临时对象,它接受一个空接口类型的值。 ◼ Get,用于从当前的池中获取临时对象,它返回一个空接口类型的值。 3、New字段: sync.Pool类型的New字段是一个创建临时对象的函数。它的类型是没有参数但是会返回一个空接口类型的函数。即:func() interface{}。 这个函数是Get方法最后

weixin_44517656的博客 942

【寒江雪】Go实现对象池模式

Object Pool Pattern   对象池模式是一种创建型模式,根据需求来预测将要使用的对象,提前创建并保存在内存中。 实现 对象池定义 package pool import ( "fmt" "strconv" ) type Object struct{ } func (Object)Do(index int){ fmt.Println...

寒江雪的博客 1038

支持树莓派Raspberry Pi的Delphi开源3D游戏引擎CGE:Castle Game Engine

最近我得到了我的Raspberry Pi 4设备,我对这些可能性感到兴奋(具有全功能Linux的小型便宜设备)。我很高兴看到Castle Game Engine在它上面完美运行????以下是在Raspberry Pi上运行的The Unholy Society的截图。 如果您对在Raspberry Pi上使用CGE感兴趣:欢迎加入Delphi知识局QQ群:32422310 只需使用软件包存储库安装F...

Delphi开发局QQ群:32422310 1536

类与对象

本段落解释了类与对象及其之间的关系 1、对象 对象就是封装了数据及在这些数据之上的操作的封装体,这个封装体有一个名字标示它,而且可以向外界提供一组操作(或服务)。 2、类 类是对具有相同属性和操作的一组对象的抽象描述。 3、类和对象的关系 类代表了一组对象的共性和特征,类是对象的抽象,即类忽略对象中具体的属性值而只保留属性。而对象是对类的实例化,即将类中的属性赋

godotlee的博客 292

游戏开发笔记1-初识Godot,你的第一个2D游戏

首先去下载最新版的godot,点击下载后有两个版本,一个是,另一个是, 并不想使用.NET,所以选择下载。下载后就是一个压缩包,解压后启动就进入godot的程序界面了。

一只大鸽子的博客 299

godot做仪表hmi

godot是一个开源引擎,除了做游戏,也可以做一些应用,本次探究在仪表hmi上一些使用技术。

chen_227的博客 239

【Unity知识速递】第7期 Unity 6.6 深度解析:WebGPU 正式版与 WebAssembly64,Web 游戏的内存革命

如何启用 Wasm64?需要注意的是,Wasm64 需要浏览器支持 Memory64 提案,目前主流浏览器的最新版本都已支持。一句话总结: Unity 6.6 用 WebGPU 转正、Wasm64 16GB 内存和渐进式加载三连击,将 Web 游戏的体验天花板又往上推了一大截——Web 平台不再是"妥协版",正在成为真正的一等公民。Unity 6.6 新增了 WebAssembly64(Wasm64) 构建选项,这可能是本次更新中对 Web 游戏开发者影响最大的一项升级。

crystal_WJT的博客 420

我给 DeepSeek 大肥鱼做了一款马里奥式闯关游戏

当全网都在把大肥鱼做成直播虚拟主播的时候,我决定给她做一款横版闯关游戏。

2301_79028807的博客 892
上一篇: 【杂谈】Godot4.4对话插件使用教程(dialogue manager 3)
下一篇: 【Android Studio 下载 Gradle 失败】
ForBigData
博客等级 码龄7年 221粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForBigData

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值