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

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

制作思路

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

详细制作案例

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

1. 创建游戏实例

创建游戏实例并应用

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

2.子弹类

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

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

制作子弹类的生成函数

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

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

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

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

这个函数的功能

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

碰撞问题和单调栈的结合-735. 小行星碰撞【有小坑】

题目链接及描述 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/asteroid-collision/description/?envTypestudy-plan…

Vue——子级向父级使用props传递数据(函数)

文章目录 前言原理案例效果演示 前言 看到这个标题,相信很多人会说我,你之前博客写的父级向子级中传递数据使用的是props,然后说的子级向父级传递数据则是用的$emit。 并且还说了对于String、数组Array,只能是父级使用props传递…

C++ 11【右值引用】

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:C修炼之路⏪   🚚代码仓库:C高阶🚚   🌹关注我🫵带你学习更多C知识   🔝🔝 1.C 11 简介 目录 1.C 11 简介 2. 统一的列表…

C语言小例程8/100

题目&#xff1a;输出特殊图案&#xff0c;请在c环境中运行&#xff0c;看一看 程序分析&#xff1a;字符共有256个。不同字符&#xff0c;图形不一样。 #include<stdio.h> int main() {char a176,b219;printf("%c%c%c%c%c\n",b,a,a,a,b);printf("%c%c%c…

Kafka 如何基于 KRaft 实现集群最终一致性协调

01 架构概览 Zookeeper 提供了配置服务、分布式同步、命名服务、Leader 选举和集群管理等功能&#xff0c;在大数据时代的开始很多开源产品都依赖 Zookeeper 来构建&#xff0c;Apache Kafka 也不例外。但是随着 Kafka 功能的演进和应用的场景越来越多&#xff1a; 基于 Zoo…

济南适宜地提取

题目: 网上下载中国的DEM、土地利用地图(1980、2000、2015年的)和一张最新济南市行政区划 图(要求:莱芜市并入济南后的区划图); 2.网上下载中国2015年年平均降水空间插值数据;3..网上下载中国2015年年平均气温空间插值数据; (注:以上数据可到资源环境科学与数据中心下载http…

QT快速下载

去QT官网之后&#xff0c;如下图所示 比如要下载qt-opensource-windows-x86-5.14.2.exe&#xff0c;进入5.14对应的文件夹&#xff0c;找到对应的版本 点击Details&#xff0c; 下载对应的种子&#xff0c;然后通过迅雷下载 个人实测&#xff0c;家庭网络平均18M的速率

【因果推断python】21_匹配2

目录 匹配估计器 匹配估计器 子分类估计器在实践中用得不多&#xff08;我们很快就会明白为什么&#xff0c;主要是因为维度诅咒这个原因&#xff09;&#xff0c;但它让我们很好地、直观地了解了因果推理估计器应该做什么&#xff0c;以及它应该如何控制混淆因素。这使我们能…

python--装饰器

[掌握]装饰器入门 语法糖 目标&#xff1a;掌握装饰器的快速使用。 装饰器本质上就是闭包&#xff0c;但装饰器有特殊作用&#xff0c;那就是&#xff1a;在不改变原有函数的基础上&#xff0c;给原有函数增加额外功能。 定义装饰器&#xff1a; def outer([外面参数列表]):…

kafka-消费者-消费异常处理(SpringBoot整合Kafka)

文章目录 1、消费异常处理1.1、application.yml配置1.2、注册异常处理器1.3、消费者使用异常处理器1.4、创建生产者发送消息1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1.7、引入spring-kafka依赖1.8、消费者控制台&#xff1a;1.8.1、第一次启动SpringK…

Linux环境---在线安装jdk

Linux环境—在线安装jdk 一、使用步骤 1.安装环境 JDK版本&#xff1a;1.8 1.1 建立存放软件的目录 注意&#xff1a;此处本人是将需要按照的软件存放在directory目录下&#xff0c;可根据实际情况调整接收路径。 命令如下&#xff1a; mkdir directory2.安装jdk 2.1 建…

【YOLOv8改进[CONV]】SPDConv助力YOLOv8目标检测效果 + 含全部代码和详细修改方式 + 手撕结构图

本文将使用SPDConv助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 SPDConv 二 SPDConv助力YOLOv8目标检测效果 1 整体修改 ① 添加SPDConv.py文件 ② 修改ultralytics/nn/tas…

Vue-插槽 Slots

文章目录 前言什么叫插槽简单插槽指定默认值多个插槽根据父级别名称指定区域显示(具名插槽)作用域插槽 前言 本篇文章不做过多的讲解与说明&#xff0c;只记录个人实验测试案例。 详见&#xff1a;vue 官方文档 插槽 slots 什么叫插槽 之前的博客中&#xff0c;父级组件可以…

【简单讲解下TalkingData】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

vite+ts设置别名

准备工作 安装 types/node 避免代码爆红 npm install types/node一、根目录下 vite.config.ts 文件中配置 import { resolve } from path;resolve: {// 设置文件./src路径为 alias: [{find: ,replacement: resolve(__dirname, ./src)}] }二、根目录下 tsconfig.json 文件中配…

【MySQL】数据库入门基础

文章目录 一、数据库的概念1. 什么是数据库2. 主流数据库3. mysql和mysqld的区别 二、MySQL基本使用1. 安装MySQL服务器在 CentOS 上安装 MySQL 服务器在 Ubuntu 上安装 MySQL 服务器验证安装 2. 服务器管理启动服务器查看服务器连接服务器停止服务器重启服务器 3. 服务器&…

美团发布2024年一季度财报:营收733亿元,同比增长25%

6月6日&#xff0c;美团(股票代码:3690.HK)发布2024年第一季度业绩报告。受益于经济持续回暖和消费复苏&#xff0c;公司各项业务继续取得稳健增长&#xff0c;营收733亿元(人民币&#xff0c;下同)&#xff0c;同比增长25%。 财报显示&#xff0c;一季度&#xff0c;美团继续…

$MPC 登录MEXC,加速Partisia Blockchain 生态市场进程

Partisia Blockchain是一个以MPC技术方案为基础&#xff0c;具备可审计特性的隐私Layer1生态&#xff0c;与此同时&#xff0c;该链通过系列创新的系统架构&#xff0c;能够兼顾高迸发、安全、可拓展性以及可互操作特性。基于系列技术特性&#xff0c;Partisia Blockchain正在构…

Mybatis 查询TypeHandler使用,转译查询数据(逗号分隔转List)

创建自定义的Hanndler /*** Package: com.datalyg.common.core.handler* ClassName: CommaSeparatedStringTypeHandler* Author: dujiayu* Description: 用于mybatis 解析逗号拼接字符串* Date: 2024/5/29 10:03* Version: 1.0*/ public class CommaSeparatedStringTypeHandle…

【重学C语言】十八、SDL2 图形编程介绍和环境配置

【重学C语言】十八、SDL2 图形编程介绍和环境配置 **SDL2介绍**SDL 2用途SDL 在哪些平台上运行&#xff1f;下载和安装 SDL2安装 SDL2 clion 配置 SDL2 SDL2介绍 SDL2&#xff08;Simple DirectMedia Layer 2&#xff09;是一个开源的跨平台多媒体开发库&#xff0c;主要用于游…