Python3: удаление врага из динамического массива при столкновении с игроком - PullRequest
0 голосов
/ 16 сентября 2018

Я создаю игру-шутер с боковым скроллером, в которой враги (дроны) постоянно появляются в правой части экрана.Недавно созданные враги добавляются в список 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 голосов
/ 17 сентября 2018

«Правильный» способ сделать это в Pygame - позволить вашим классам наследовать от Sprite, а затем использовать Group вместо простого списка для хранения ваших враги и используют pygame.sprite.spritecollide для обнаружения столкновений с аргументом dokill, установленным в True.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...