for循环中的“index-tracker”(Pygame)

问题描述 投票:0回答:1

我是python的新手,我正在浏览这个小游戏的代码(https://www.raywenderlich.com/2795-beginning-game-programming-for-teens-with-python的完整描述)我试图理解这段代码如何跟踪屏幕上的实际元素,更具体地说,它是如何“知道“一旦达到设定的边界,列表中的哪个元素必须弹出。 (见下文)从理论上讲,我得到了代码中使用的for循环的概念,但我感觉这些代码中的某些东西不正确,或者同样可能的是,我认为它的方式缺少逻辑部分。

非常感谢你!

for bullet in arrows:

        index=0
        velx= math.cos(bullet[0])*10
        vely= math.sin(bullet[0])*10
        bullet[1]+=velx
        bullet[2]+=vely
        if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480:
            arrows.pop(index)
        index+=1
 index=0
    for badguy in badguys:
        if badguy[0]<-64:
            badguys.pop(index)
        badguy[0]-=7
        index+=1

我想到它的方式,在第一个“箭头”循环中索引将始终保持为“0”,因此无论哪个箭头离开屏幕,箭头列表中的第一个元素[0]都将被删除(弹出) 。然后我也不明白为什么最后有一个索引+ = 1,之后它又变回[0]?

然后是第二个,索引实际上是上升的(我在屏幕上显示它),但仍然只有离开屏幕的“badguy”(在这种情况下始终是列表[0]的第一个元素)弹出该列表,虽然从代码中我认为它应该是具有指定索引值的元素(例如[3]或[4] ...)

非常感谢,抱歉这篇长篇文章。

python for-loop pop
1个回答
0
投票

我也不明白index += 1之后是否有任何代码?但真正的循环是for bullet in arrows所以每个箭头都被检查。但你的权利是删除的箭头始终在索引0.所以index = 0应该在循环之外。

但是你的第二次调查是错误的。 badguy[0]不是第一个坏蛋。相反,它是活跃badguy(for badguy in badguys)的第一个信息(像x值一样)。

© www.soinside.com 2019 - 2024. All rights reserved.