我最近开坑了一个类似东方project的弹幕游戏制作,由于之前没有经验(也就是说我是个小白),遇到弹幕碰撞时产生如下问题:
我有敌人的ArrayList<Enemy> 也有玩家的弹幕ArrayList<Bullet> 但是对于类似东方这种游戏,不管是敌人还是弹幕都是很多的,我尝试用for来一个个检测,但显然,cpu一下子就升上去,那么有什么好的方法?
我最近开坑了一个类似东方project的弹幕游戏制作,由于之前没有经验(也就是说我是个小白),遇到弹幕碰撞时产生如下问题:
我有敌人的ArrayList<Enemy> 也有玩家的弹幕ArrayList<Bullet> 但是对于类似东方这种游戏,不管是敌人还是弹幕都是很多的,我尝试用for来一个个检测,但显然,cpu一下子就升上去,那么有什么好的方法?
以下几个建议吧。
1.不在渲染范围的不要检测。这个一般游戏引擎都会这个事情,这个答主应该不需要做了。
2.for循环还是免不了的,但是for循环里面的检测算法可以进行优化,比如可以将敌人按照4个象限划分,玩家的也按照4个象限划分。这样每个象限内的元素进行碰撞,减少双层for循环的次数。比如检测的算法,可以写的粗糙点,比如只判断4个边角之类的,减少算法时间。(核心就是时间换空间,空间换时间,精度换时间)。或者让用户换cpu
3.使用shader碰撞,不知道是否可行。没做过这一块。即把碰撞检测交给gpu来做,减少cpu使用率