一.前言:自己找了一些文章,还在学习libGdx,利用libGdx实现子弹效果,遇到的一个头疼的问题,若有好的解决办法,欢迎留言交流,互相学习:
问题:实现子弹效果,两种思路
一是不断的创建子弹,追后actor虽然不能销毁,但是可以隐藏,但在我没有找到回收的方法,意味着内存会疯狂增加,最后崩溃;
二是创建子弹,反复使用,不够则新建一个,这样可以避免反反复复创建子弹和给子弹创建动作,但是框架提供的方法getActions获取到的是父类action,不能设置动作目标位置;
这是java,他的MoveToAction实例创建之后是引用数据类型,所以就有了这个思路:在自己的演员actor类中定义一个参数MoveToAction,在addAction的时候将该action绑定到这个参数,这样只要取到这个actor就可以随意的修改action的目标位置了
这时屏幕上的子弹就实现了创建指定数量的实例,并重复利用
但这时又有一个问题,子弹actor运行事件稍长,就会逐渐同步,重叠到一起去,与我们想要的同间距发射效果想去甚远,这时,创建一个定时器,扫描子弹清单,去决定创建子弹还是重写发送子弹:
子弹到达目标地点时:
actor1.getMoveToAction().finish():停用这个动作,减少资源消耗
子弹需要重新启用时:
actor.getMoveToAction().restart():启用此子弹的动作
完美解决在actor创建之后,重复利用并任意修改起始和结束位置,同时保证子弹发射时间间隔相同的问题