俯视角2D游戏_02 子弹对象池

news2025/4/21 8:29:44

[!NOTE] 对象池
应用场合:这种做法常用于子弹这种会大量产生的对象 ,目的是减少性能的损耗
基本思路:产生的对象是有限的,并且加入到"对象池"的数组中不进行销毁,当需要使用时,再从对象池中提取对象循环利用,以达到有限的对象无限的调用的结果(这使我想到了庞加莱回归)
(这里的对象池是一种抽象的说法,它实际上在场景中一个玩家看不到的位置,只不过程序上来说这个对象在对象池的数组中)

制作思路

  1. 要实现子弹的对象池,需要做以下三件事
    • 创建一个游戏实例(游戏实例在虚幻引擎中的生命周期是最长的,不会受到关卡的切换而受到影响)
    • 创建子弹类(具体生成的实例的类,这个类为了可以复用,需要可以定制化)
    • 创建对象管理器(这个类用于处理玩家蓝图中发射子弹指令并管理关卡中生成的实例,以及实例生成的规则)
  2. 调用关系
    玩家蓝图——>对象管理器——>游戏实例&子弹类

详细制作案例

制作一个可以自定义的子弹类,玩家按鼠标右键可以朝光标位置发射,发射这个子弹时使用对象池的方式对其进行处理

1. 创建游戏实例

创建游戏实例并应用

在这里插入图片描述#### 应用该游戏实例
在这里插入图片描述#### 游戏实例可被调用
游戏实例需要有引入两个变量
在这里插入图片描述#### 在公用函数库中编写一个游戏实例的调用函数方便后续调用

2.子弹类

创建一个枚举变量用于管理子弹类的状态

在这里插入图片描述#### 创建子弹类

制作子弹类的生成函数

该函数需要可定制化制作
在这里插入图片描述##### 制作子弹回收函数(被生成函数调用)
这个函数就是子弹的生命周期结束后,把子弹加入对象池并把对象移到一个看不见的地方(对玩家来说这颗子弹就相当于被销毁了)
在这里插入图片描述### 3.对象管理器

创建一个蓝图类作为对象管理器

初始化函数需要获取游戏实例并设置对象管理器为当前游戏实例
在这里插入图片描述#### 创建一个子弹的对象池管理函数(重点
这个函数用于管理子弹的对象池,由玩家蓝图进行调用
- 每次对象是否处于回收的状态(可以理解为子弹是否在子弹池中)
- 每次循环结束都判断一下子弹是否有效
- 如果无效(说明场上没有子弹),就生成一个子弹并将其加入子弹池数组,设置其参数和生成位置
- 如果有效(说明场上有子弹,子弹池中有子弹),就直接设置其参数和生成位置
在这里插入图片描述### 4.玩家蓝图的输入事件

1.创建发射子弹的按键映射(略)
2.创建发射函数

这个函数的功能

  • 调用了对象管理器中的子弹池管理函数并设置了子弹的参数
  • 获取了光标所在的位置并将位置参数传给子弹池管理函数
    在这里插入图片描述##### Tips
  1. 需要在玩家控制器中显示鼠标光标
    在这里插入图片描述
  2. 对象管理器需要放置在场景中实例化才能被正确调用
  3. 注意场景的碰撞通道中的可视化通道是否被忽略了,因为光标的获取需要可视化的通道是是阻挡
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

1961. 检查字符串是否为数组前缀 - 力扣

1. 题目 给你一个字符串 s 和一个字符串数组 words ,请你判断 s 是否为 words 的 前缀字符串 。 字符串 s 要成为 words 的 前缀字符串 ,需要满足:s 可以由 words 中的前 k(k 为 正数 )个字符串按顺序相连得到&#xf…

Lab_ Exploiting a mass assignment vulnerability_实验室:利用大规模分配漏洞

使用 wiener:peter 登录 点击轻量级“l33t”皮夹克产品并将其添加到购物篮中。 去到购物车,点击下单,提示Not enough store credit for this purchase(没有足够的商店信用用于此次购买) 在Burp的HTTP历史记录中发现了API的请求…

Vivado 比特流编译时间获取以及FPGA电压温度获取(实用)

Vivado 比特流编译时间获取以及FPGA电压温度获取 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado Vivado 比特流编译时间获取以及FPGA电压温度获取一、引言二、 获取FPGA 当前程序的编译时间verilog中直接调用下面源语2. FPGA电压温度获取(1&a…

解决CentOS 7无法识别ntfs的问题

解决CentOS 7无法识别ntfs的问题 方式一: Centos默认不支持ntfs文件格式,直接在Centos7上插U盘或移动硬盘无法识别,安装 ntfs-3g即可: # yum install epel-release -y # yum install ntfs-3g -y[rootbogon ~]# rpm -qa | grep nt…

外贸干货|如何提高商机转化率?

常常听到外贸业务员抱怨“询盘质量不高”、“有询盘没转化”、“有些客户只是来比价格的”……想必大家都不陌生! 但难道只有询盘问题、客户问题吗?我们自身的处理真的没问题吗?我想只有更多的自省自查我们可以控制的问题,优化我们…

尚云SunClouds打造以云算力为核心的混合云平台!

在数字经济迅猛发展的今天,算力已跃升为新基础能源,人工智能成为引领产业革新的核心工具。5月24日,尚云依托尚航科技全国智算中心的资源网络,打造了以云算力为核心的新一代混合云平台,尚云SunClouds品牌焕新上线&#…

React -- memo允许你的组件在 props 没有改变的情况下跳过重新渲染。

memo(Component, arePropsEqual?) 使用 memo 将组件包装起来,以获得该组件的一个 记忆化 版本。通常情况下,只要该组件的 props 没有改变,这个记忆化版本就不会在其父组件重新渲染时重新渲染。但 React 仍可能会重新渲染它:记忆化…

OpenAI新研究破解GPT-4大脑,分解1600万个特征打开“黑匣子”,Ilya 、Jan Leike也参与了!

6月7日凌晨,OpenAI在官网发布了一个新的研究成果,首次破解GPT-4的神经网络活动。通过改进大规模训练稀疏自动编码器将GPT-4的内部表示分解为 1600 万个特征。而且,前段时间离职的Ilya Sutskever、Jan Leike也是作者之一! 这不是破…

计算机专业本科就业还是考研?考研有哪些热门方向?

考研并不是一个逃避就业的避难所,也不是一个简单的提升待遇的手段。考研是提升自我的途径,特别是对于那些对特定技术领域有浓厚兴趣并愿意深入研究的人来说 一个本科生能够认真学三年,那么他们所掌握的技能和知识不应该逊色于那些通过短期培…

Faiss框架使用与FaissRetriever实现

Faiss是一个由Facebook AI Research开发的库,用于高效相似性搜索和稠密向量聚类。它为机器学习和深度学习中的向量检索问题提供了一种高效的解决方案,特别是在处理大规模数据集时。Faiss支持多种索引类型,包括基于量化的索引、基于聚类的索引…

Apache Doris 基础 -- 数据表设计(模式更改)

用户可以通过schema Change操作修改现有表的模式。表的模式主要包括对列的修改和对索引的修改。这里我们主要介绍与列相关的Scheme更改。对于与索引相关的更改,可以查看数据表设计/表索引,查看每个索引的更改方法。 1、术语 基本表(Base Ta…

命运2联机出错、无法组队?命运2频繁卡顿、延迟高的解决方法

命运2是一款由Bungie制作的第一人称射击游戏,昨日玩家们期待的最新DLC在全球发布,steam同时在线人数几乎打破历史记录达到314K,但是有不少玩家遇到联机失败、无法联机、匹配不了的情况,不知道怎么解决,下面提供几种解决…

Hi3519DV500 学习摘录

文章目录 一、问题1、open-vm-tools 安装2、pushd: not found3、autoreconf4、编译util-linux源码时报错 ERROR: You must have autopoint installed to 二、NFS1、服务器搭建2、u-boot常用命令3、配置4、问题 三、补缺1、make 一、问题 1、open-vm-tools 安装 open-vm-tools…

Phpstorm使用xdebug断点调试

一、目标 1、在浏览器地址栏里操作页面访问接口时,可以在项目代码对应入口处断点拦截调试; 2、在postman调用接口时,可以在项目代码对应入口处断点拦截调试; phpstorm版本:PhpStorm 2024.1.2 二、具体操作 1、安装…

2种方法!一键批量下载1688主图、sku图、视频和详情页

最近关于如何一键下载1688主图、sku图、视频和详情页相关的问题被商友们问爆了。店雷达直接上实操教程,建议收藏,不迷路! 方法一:通过选品中心下载 1、在店雷达选品中心(如果想在1688进货的就在1688选品库中选品&…

激发AI创新潜能,OPENAIGC开发者大赛赛题解析

人工智能(AI)的飞速发展,特别是AIGC、大模型、数字人技术的成熟,不仅改变了数据处理和信息消费的方式,也为企业和个人提供了前所未有的机遇。在这种技术进步的背景下,由联想拯救者、AIGC开放社区、英特尔共…

图标绘制软件draw.io中文安装包

Draw.io(也称为Diagrams)是一款功能强大的免费在线图表绘制工具。它支持绘制多种类型的图表,如流程图、UML图、组织结构图等,满足了从商务到工程设计的多领域需求。软件界面直观友好,操作简单,用户无需安装…

若依框架改造多租户模式

当前使用版本3.6.416.20.2 (Currently using 64-bit executable)https://doc.ruoyi.vip/ruoyi-cloud/document/hjbs.html 一、若依Cloud改为多租户模式 当前使用版本3.6.4,既然要改为多租户模式,多租户重点是什么,数据隔离,那么…

​【JS重点知识04】JS执行机制(重点面试题)

学前案例: console.log(111); setTimeout(function () {console.log(222); }, 1000) console.log(333); //输出结果:1111 333 222 console.log(111); setTimeout(function () {console.log(222); }, 0) console.log(333); //输出结果:111 33…

各行业万能预约门店小程序源码系统 支持多门店预约 前后端分离 带完整的安装源码包以及搭建教程

在移动互联网快速发展的今天,小程序以其轻量级、即用即走的特点,成为了企业连接用户、提供服务的重要桥梁。特别是在服务行业,如美容美发、餐饮、医疗、教育等领域,门店预约系统的重要性不言而喻。为了满足各行业对门店预约系统的…