对象池模式,处理Boss的投射物攻击

不使用对象池

如果不使用对象池,那么假设一个Boss技能发射10个投射物,那么就会导致每次技能的释放需要创建10个投射物,然后遇到条件进行销毁

对象池模式

维护一个存储投射物的容器,然后在发射时从容器中取出,当"销毁时"放回容器中。

实现方式

以发射投射物为例,
首先对于投射物创建一个父类,该父类表示对象池中存储的对象类型,其中维护两个参数分别是是否被使用(bool),该对象有效时间(float)
并且拥有一个方法SetInUse,当bool值改变时,使得该对象实例的碰撞(collision),显示(hidden)等得到调整
如果是从没有使用变成使用,就还需要增添一个计时器来控制对象的回到池子的时间

对象池模拟

对于对象池的模拟,采用组件的方式进行模拟
首先内部需要维护,当前对象池存放对象的类型,一个对象池维护一种类型,其次是对象池的大小和对象池本身以对象类型数组的方式存在
其首先是初始化方法:在开始时生成对象实例存放到数组中
第二个方法是寻找到到当前有效的对象实例
第三个方法是对该对象实例设置场景中的位置,通过传入FTransform,然后对上一个方法中获得的有效对象实例,进行修改比如修改其布尔值等等

调用方式

首先对于投射物类就需要通过父类来创建,然后将组件挂接在Boss身上,通过在编辑器内中分配组件中的成员变量,实现发射投射物的效果

注意

当Projectile发生碰撞后,会调用SetInUse(false),所以在定时器处理调用时,需要先判断当前Actor的Use是否为true
其次,是当方式碰撞时,ProjectileMovement可能会停止更新运动,即对于其绑定的SphereCollision可能会失效,所以需要在下一次调用产生粒子之前,重启组件

C++中的FRotator结构体和蓝图中Split某个Rotator节点的区别

之前以为是对应,结果发现并不是,可以在源码中看到FRotator结构体的三个变量分别对应Splite后的Y,Z,X

缺陷

由于在一开始就生成了物体,所以物体会一直存放在内存中,只不过在使用时修改了位置和显示而已,如果不需要这些物体,应当及时删除

作者:XTG111

出处:https://www.cnblogs.com/XTG111/p/18353932

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   XTG111  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示