我们在做射击类的游戏的时候我们经常会用到子弹,我们对子弹的处理经常性的是先把它实例化出来,然后我们再让他移动进行攻击,当子弹到超出一定范围(时间)或者碰撞到某些东西的时候的时候我们就会把它给摧毁掉。然后这样一直实例,一直摧毁,在游戏刚开始的时候可能觉察不到,但是越到后边越卡。这就是因为实例和摧毁比较消耗性能。此时对待这种情况我们就可以用对象池。
上图就是对象池的应用流程图,我们首先建一个对象池(声明一个List集合),然后估算我们在场景中最多会出现多少个子弹,然后我们就在这个集合中加入相应数量的子弹实例,刚开始子弹是隐藏的,等到我们用到的时候我们在把它setActive(true),然后对他的位置进行设置,当我们的子弹应用结束(在普通方法里就是要摧毁他的时候),我们再把他设置为False,回收对象。就这样一直循环。同时我们还要用一个下标以方便我们从对像池中取东西
我们先声明一个对象池,并把下标也给初始化。
通过这个方法向对象池里边加入相应数量的实例
调用对象池里实例的时候,首先判断下标是否超出范围,当我们调用到实例的时候也要把下标给加1.
当我们调用完以后再把他设置为隐藏。
我们注意这个图的右边,就是子弹一直在隐藏,显示之间转换。
比如我做的这个飞机小游戏,他可能子弹要升级,那子弹的模型可能就跟原来的子弹不一样,此时我们就需要多创建几个对象池,当飞机要切换子弹类型的时候,直接去切换对象池就可以了,不要在切换子弹的时候我们再给他创建对象池,这样可能会有点卡顿的现象。