问题描述
我制作了一个球被另一个球追赶的伪游戏,当我改变红球(跟随球)的数量时,游戏的速度会增加,我想这是由于循环的迭代导致移动并在主循环中找到碰撞,游戏中的球越多,迭代次数越多,因此球的速度增加。有关如何解决此问题的任何建议?
id name child_count
--+--------------+---------
1 root_a 0
2 root_b 1
3 sub_b1 2
4 sub_sub_b1_1 0
5 sub_sub_b1_2 0
解决方法
一个明显的问题是内部循环从 2 运行到 len(lista_bolas)
。由于您只想移动每个球一次并且只想检查球之间的碰撞一次,因此从 indice+1
到 len(lista_bolas)
运行内部循环就足够了。
此外,您需要在外循环中移动每个球一次,而不是在内循环中重复移动:
while not terminar:
# [...]
for indice in range(2,len(lista_bolas)):
lista_bolas[indice].mover(posiciones_xy[indice],pos_flechas,indice)
for indicej in range(indice+1,len(lista_bolas)):
colision,dist_col = lista_bolas[indice].colision(posiciones_xy[indice],posiciones_xy[indicej],indice,tamaño)
lista_bolas[indice].reaccion(posiciones_xy[indice],indice)
lista_bolas[indice].colision_estatica(posiciones_xy[indice],[ancho / 2,alto / 2],indice) # colision estatica bola central vs bolas perseguidor
lista_bolas[indice].colision_estatica(posiciones_xy[0],0) # colision estatica bola central con bola azul
colision,dist_col = lista_bolas[0].colision(posiciones_xy[0],posiciones_xy[indice],tamaño) # colision con la bola principal
lista_bolas[0].reaccion(posiciones_xy[0],0) # reaccion bola principal
lista_bolas[indice].draw()
bola_ppal.draw()
bola_central.draw()
pygame.display.update()