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

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

制作思路

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

详细制作案例

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

1. 创建游戏实例

创建游戏实例并应用

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

2.子弹类

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

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

制作子弹类的生成函数

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

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

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

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

这个函数的功能

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

玩物科技:引领物联网时代的创新先锋

在深圳这座充满活力和创新精神的城市,有一家年轻而充满潜力的公司正在悄然改变我们的日常生活。深圳市玩物科技有限公司自2017年成立以来,凭借其卓越的技术和创新理念,逐渐成为物联网时代的先锋力量。 玩物科技的愿景与使命 玩物科技的核心…

【Linux】进程(7):地址空间

大家好,我是苏貝,本篇博客带大家了解Linux进程(7):地址空间,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 (A) 直接看代码&…

MATLAB基础应用精讲-【数模应用】二元Logit分析(最终篇)(附python、MATLAB和R语言代码实现)

目录 算法原理 SPSSAU 1、二元logistic分析思路说明 2、如何使用SPSSAU进行二元logistic操作 3、二元logistic相关问题 算法流程 一、分析前准备 1、确定分析项 2.多重共线性判断 3.数据预处理 二、回归基本情况分析 三、模型拟合评价 1、似然比检验 2、拟合优…

Linux - 深入理解/proc虚拟文件系统:从基础到高级

文章目录 Linux /proc虚拟文件系统/proc/self使用 /proc/self 的优势/proc/self 的使用案例案例1:获取当前进程的状态信息案例2:获取当前进程的命令行参数案例3:获取当前进程的内存映射案例4:获取当前进程的文件描述符 /proc中进程…

【GIS教程】土地利用转移矩阵

随着科技社会的不断进步,人类活动对地理环境的影响与塑造日益明显,土地不断的侵蚀与改变也导致一系列的环境问题日益突出。土地利用/覆盖(LUCC)作为全球环境变化研究的重点问题为越来越多的国际研究机构所重视,研究它的…

酷开系统丨酷开科技智慧AI 让家庭智能化近在眼前

科技改变生活,从3G-4G-5G,再到即将突破的6G;从传统有人驾驶的车辆到现在的无人驾驶车辆;从九十年代的大哥大“砖头”便携电话,到蓝绿屏按键手机、触摸屏手机,再到智能手机;从传统数字密码到现在…

信息系统项目管理师0146:输入(9项目范围管理—9.3规划范围管理—9.3.1输入)

点击查看专栏目录 文章目录 9.3 规划范围管理9.3.1 输入9.3 规划范围管理 规划范围管理是为了记录如何定义、确认和控制项目范围及产品范围,而创建范围管理计划的过程。本过程的主要作用是在整个项目期间对如何管理范围提供指南和方向。本过程仅开展一次或仅在项目的预定义点开…

【RuoYi】框架中使用wangdietor富文本编辑器

一、前言 在上篇博客中,介绍了RuoYi中如何实现文件的上传与下载,那么这篇博客讲一下如何在RuoYi中使用富文本编辑器,这部分的内容是向B站程序员青戈学习的,当然我这里就会把学到的内容做一个总结,当然也会说…

信息系统项目管理师0147:工具与技术(9项目范围管理—9.3规划范围管理—9.3.2工具与技术)

点击查看专栏目录 文章目录 9.3.2 工具与技术 9.3.2 工具与技术 专家判断 规划范围管理过程中,应征求具备如下领域相关专业知识或接受过相关培训的个人或小组 的意见,涉及的领域包括:以往类似项目;特定行业、学科和应用领域的信息…

服务器远程连接工具有哪些?

【天联】是一款功能强大的服务器远程连接工具,它可以让用户通过网络远程连接到目标服务器,实现远程操作和管理。【天联】的使用场景非常广泛,特别适用于以下几个领域: 零售、收银软件应用的远程管理:【天联】可以结合医…

Stable Diffusion【应用篇】【图片修复】:模糊头像照片的高清修复

本文主要是回复一下后台小伙伴留言的问题。经小伙伴本人同意后,允许使用待修复的照片。 我们先看一下待修复的照片。 在向我咨询之前,小伙伴也自己进行了尝试,如果直接使用Stable Diffusion的后期处理功能,出来的图片效果是这样的…

Spring Security3.0.1版本

前言: 抽象Spring Security3.0上一篇 在上一篇中,我们完成了对Security导入,快速入门,和对自动配置的简单验证 对登录流程的分析和Security基本原理 补充: 先解决上一篇留下的问题,端口和端点的区别 端…

Javascript系统学习(三)

前端模块化前端模块化CommonJS、AMD、CMD、ES6_commonjs amd cmd es6模块化-CSDN博客 ES6: <script type"module" src"main.js"></script> //默认导出 export default function(ctx) {... } ----------------------------------- //模块命名…

每日题库:Huawe数通HCIA——全部【813道】

1.关于ARP报文的说法错误的是?单选 A.ARP报文不能被转发到其他广播域 B.ARP应答报文是单播方发送的 C.任何链路层协议都需要ARP协议辅助获取数据链路层标识 DARP请求报文是广播发送的 答案:C  解析: STP协议不需要ARP辅助 2.园区网络搭建时,使用以下哪种协议可以避免出现二层…

[AIGC] 详解Mockito - 简单易学的Java单元测试框架

在Java的世界中, 单元测试是一项非常重要的任务. Mockito作为一个强大灵活的mock框架&#xff0c;可以帮助我们有效的编写和管理我们的单元测试. 了解并掌握Mockito的使用对于提高我们的开发效率和保证我们的软件质量有着巨大的帮助. 文章目录 什么是Mockito?Mockito的核心API…

UE4_环境_材质函数

学习笔记&#xff0c;不喜勿喷&#xff0c;欢迎指正&#xff0c;侵权立删&#xff01; 1、建立材质函数Distance_Fun&#xff0c;勾选公开到库。 2、添加函数输入节点FunctionInput&#xff0c; 这个输入我们想作为混合材质属性BlendMaterialAttributes的alpha输入节点&#x…

苍穹外卖笔记-06-菜品管理-菜品分类,公共字段填充

菜品分类 1 菜品分类模块1.1 需求分析与设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.3 代码实现1.4 测试分类分页查询启用禁用分类修改分类信息新增菜品分类删除菜品分类 2 公共字段自动填充2.1 问题分析2.2 实现思路自定义注解AutoFill自定义切面AutoFillAspectMapper接口…

C++ | Leetcode C++题解之第136题只出现一次的数字

题目&#xff1a; 题解&#xff1a; class Solution { public:int singleNumber(vector<int>& nums) {int ret 0;for (auto e: nums) ret ^ e;return ret;} };

如何在手机上恢复误删除的视频?

说到移动设备上的视频恢复&#xff0c;我们仍将揭开4种解决方案供您使用。希望它们对您的案件有所帮助。 众所周知&#xff0c;我们移动设备上的视频应用程序将创建一个缓存文件夹&#xff0c;以在它们永远消失之前临时存储已删除的项目。因此&#xff0c;有许多iPhone / Andr…

《系统架构设计师教程(第2版)》第11章-未来信息综合技术-02-人工智能技术概述

文章目录 1. 人工智能&#xff08;AI&#xff09;1.1 弱人工智能1.2 强人工智能 2. 人工智能的发展历程3. 人工智能关键技术31. 自然语言处理 (Natural Language Processing)3.2 计算机视觉 (Computer Vision)3.3 知识图谱 (Knowledge Graph)3.4 人机交互 (Human-Computer Inte…