当前位置: 首页 > news >正文

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

如切如磋,如琢如磨。

目录

  • 一、展示
  • 二、什么是对象池
  • 三、对象池脚本

一、展示

这是一个发射球的游戏,发射出的球每过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

相关文章:

  • 盖泽 寻边器 帮助类
  • 开发中后端返回下划线数据,要不要统一转驼峰?
  • 【HTML5游戏开发教程】零基础入门合成大西瓜游戏实战 | JS物理引擎+Canvas动画+完整源码详解
  • C# BULK INSERT导入大数据文件数据到SqlServer
  • centos7.9镜像源及Python引入ssl问题处理
  • OLED中英文混合显示
  • 如何设计一个处理物联网设备数据流的后端系统。
  • SpringMVC 配置详解
  • 《深度剖析:DevEco Studio 如何实现人工智能模型的高效可视化开发》
  • 交换机(access端口)
  • Vue中的状态管理器Vuex被Pinia所替代-上手使用指南
  • 数据预处理习题
  • EtherCAT转CANopen配置CANopen侧的PDO映射
  • JavaScript性能优化实战手册:从V8引擎到React的毫秒级性能革命
  • 大数据平台各组件功能与协同作用全解析
  • Python Excel表格数据对比工具
  • Spring MVC配置详解:从历史到实战
  • 多路径PKL文件读取与合并
  • 云服务器怎么设置端口禁用呢?
  • Python 迭代器与生成器:深入理解与实践
  • 今年4月上海一二手房成交面积同比增21%,二手房成交2.07万套
  • 人民日报评论员:因势利导对经济布局进行调整优化
  • “上博号”彩绘大飞机今日启航:万米高空传播中国古代文化
  • 陈文清:推进扫黑除恶常态化走深走实,有力回应人民群众对安居乐业的新期待
  • 人社部:将制定提前领取个人养老金相关办法
  • 苏州一季度GDP为6095.68亿元,同比增长6%