Python3:与玩家碰撞时从动态数组中删除敌人

时间:2018-09-16 11:59:10

标签: python object pygame

我正在创建一款侧向射击游戏,其中敌人(无人机)不断地在屏幕右侧生成。最近创建的敌人将附加到列表drones中。每个敌人都移至屏幕左侧。一旦离开屏幕,它们就会从列表中删除。

当无人机与播放器碰撞时,我也想将其移除。只要drones列表中有多个对象,以下代码就可以正常工作,但是当列表中只有一个项目(因此屏幕上有一个无人机)时,在碰撞时无人机不会被删除。

我不知道为什么第一个列表项无法销毁。

drones = []
class Drone
    #other call methods

    def hit(self):
        del drones[drones.index(self)]

def generate_enemy():
    global drones
    if len(drones) < 20:    
        if (random.randint(1,100) == 1):
            drones.append(Drone(screenWidth, random.randint(300,500)) 

def main():
    global drones
    while True:
       #main loop stuff happening
       if condition == True:
           generate_enemy():
       #main loop stuff happening
       if player and (len(drones) > 0):
           for i in range(len(drones)-1):
               if drones[i].hitbox.colliderect(player.hitbox):
                   drones[i].hit()
main()

1 个答案:

答案 0 :(得分:0)

在pygame中执行此操作的“正确”方法是让您的类继承自Sprite,然后使用Group而不是简单的列表来存储您的敌人,并使用{{3} },并将dokill参数设置为True