我的循环无限循环,我不明白为什么会发生这种情况 循环似乎永远循环
循环是:
def process_projectiles():
tmp = projectile_idx
projectile_idx.clear
for i in tmp:
#print(i)
# Delete too old
if i[6] > tick - 100:
b = degtorad(i[2])
pos = move(i[0],b,i[2])
speed = i[1]
direction = i[2]
sprite = i[3]
size = i[4]
damage = i[5]
b = i[6]
projectile_type = i[7]
projectile_idx.append([pos,speed,direction,sprite,size,damage,b,projectile_type])
projectile_idx 是:
[[<Vector2(544, 360)>, 5, 282, '0127', 44.8, 10, 42, 'Purpball']]
并由以下方式生成:
a = (player_pos.x + (screen.get_width() // 2)) - cam_pos.x
b = (player_pos.y + ((screen.get_height() // 2)- tilesize // 1.42)) - cam_pos.y
c = math.floor(angle_between_points((a,b),cur_pos))
if c <= 180:
pos.x += tilesize*2.5
elif c > 180:
pos.x += tilesize*-1.5
direction = c
# TO-DO Implement in a more long term solution
speed = 5
size = tilesize * 0.7
sprite = "0127"
damage = 10
projectile_type = "Purpball"
projectile_idx.append([pos,speed,direction,sprite,size,damage,tick,projectile_type])
我正在尝试循环 tmp 中的平均列表。 我尝试使用 while 循环进行循环,但每次调用函数时它都会爆炸到一个疯狂的数字。
感谢您提前的帮助
看来问题出在你的循环逻辑上。
我们来分析一下:
tmp = projectile_idx
projectile_idx.clear
for i in tmp:
...
在此循环中,您将迭代 tmp,它被分配了对projectile_idx 的引用。然后清除projectile_idx,但由于tmp保存对projectile_idx的引用,因此清除projectile_idx也会清除tmp。因此,tmp 变成一个空列表,并且循环无限期地继续,因为没有可以迭代的元素。
要解决此问题,您需要复制projectile_idx,以便对projectile_idx的更改不会影响tmp。您可以使用复制模块来实现此目的:
import copy
def process_projectiles():
tmp = copy.deepcopy(projectile_idx)
for i in tmp:
...
这样,tmp 会保存一份单独的projectile_idx 副本,清除projectile_idx 不会影响tmp。