end*_*x1x 9 python algorithm pygame
我正在开发一个简单的2D游戏,许多敌人不断产生并追逐python + pygame中的玩家或玩家.我遇到的一个问题是,有很多人编写了这种类型的游戏已经遇到的问题是敌人会很快收敛.我已经用这个函数暂时解决了这个问题,如果它们彼此太靠近,它会将任意两个敌人随机分开.这很有效,但是关于O(n ^ 2)算法,每帧运行,在高敌时,程序开始减速.
当我的程序运行此功能时,敌人似乎形成了圆形物体,我昵称为"丛".丛似乎通常是黄道但实际上可能更复杂(不对称),因为当玩家移动时,敌人被拉向不同的方向.我喜欢这种丛的行为方式,但我想知道是否有更有效的方法来计算它.目前,丛中的每个敌人(通常> 100)首先朝着玩家的方向移动,然后被推开.如果有一种方法来计算丛生成的数字,以及它如何移动它将节省大量的计算.
我不确定如何处理这个问题.可以计算图形边界移动的位置,然后展开它以确保区域保持不变.
我的两个功能目前也被用来移动敌人:
def moveEnemy(enemy, player, speed):
a = player.left-enemy.left
b = player.top-enemy.top
r = speed/math.hypot(a,b)
return enemy.move(r*a, r*b)
def clump(enemys):
for p in range(len(enemys)):
for q in range(len(enemys)-p-1):
a = enemys[p]
b = enemys[p+q+1]
if abs(a.left-b.left)+abs(a.top-b.top)<CLUMP:
xChange = (random.random()-.5)*CLUMP
yChange = ((CLUMP/2)**2-xChange**2)**.5
enemys[p] = enemys[p].move(int(xChange+.5), int(yChange + .5))
enemys[p+q+1] = enemys[p+q+1].move(-int(xChange+.5),-int(yChange+.5))
return enemys
Run Code Online (Sandbox Code Playgroud)
编辑:一些关于丛的外观的屏幕截图:http: //imageshack.us/photo/my-images/651/elip.png/ http://imageshack.us/photo/my-images/832/newfni.png /
http://imageshack.us/photo/my-images/836/gamewk.png/
丛似乎主要是一个刚刚拉伸的圆形物体(如日食,但可能在多个方向上拉伸),但由于长方形的敌人,它目前有直边.
有几种方法可以解决这个问题,具体取决于你的游戏.以下是一些改进性能的想法:
编辑:当单位接近目标时,它可能表现不正常.我建议他们不要让他们回到遥远的确切目标,他们实际上寻找一个随机的附近目标.就像偏离真正的目标一样.
我相信还有很多其他方法可以改善这一点,毕竟它还是非常开放的.我还要指出的类鸟群和植绒可能会感兴趣.