Python 从列表中提取的对象不在屏幕上(pygame)

Python 从列表中提取的对象不在屏幕上(pygame),python,pygame,Python,Pygame,我开始更多地使用类,并尝试将我的旧的无类代码转换为这种新格式。以前,我将列表定义为全局变量,可以毫无问题地将多个敌人吸引到屏幕上。然而,这一次,与职业有关的东西会导致敌人被吸引,并立即从他们的位置消失 非常感谢您的帮助或解决方法。代码如下: import pygame import sys import random import math pygame.init() class enemies(object): enemies = [] def __init__(self,

我开始更多地使用类,并尝试将我的旧的无类代码转换为这种新格式。以前,我将列表定义为全局变量,可以毫无问题地将多个敌人吸引到屏幕上。然而,这一次,与职业有关的东西会导致敌人被吸引,并立即从他们的位置消失

非常感谢您的帮助或解决方法。代码如下:

import pygame
import sys
import random
import math

pygame.init()

class enemies(object):
    enemies = []
    def __init__(self, enemy_num, diff, enemy_size):
        self.enemy_num = enemy_num
        self.diff = diff
        self.enemy_s = enemy_size

    def add_enemies(self):
        counter = 0
        if len(self.enemies) < self.enemy_num:
            for enemy in range(0, self.enemy_num):
                if len(self.enemies) < 5:
                    self.enemies.append([counter * (self.enemy_s * 0.5), 200, (50, 168, 82)])
                elif len(self.enemies) > 5 and len(self.enemies) <= 9:
                    self.enemies.append([counter * (self.enemy_s * 0.5), 250, (168, 160, 50)])
                else:
                    self.enemies.append([counter * (self.enemy_s * 0.5), 300, (50, 52, 168)])
                counter += 1

    def move(self, surface):
        for enemy in self.enemies:
            surface.fill((0, 0, 0))
            pygame.draw.rect(surface, enemy[2], (enemy[0], enemy[1], self.enemy_s, self.enemy_s))
            pygame.display.update()

class ship(object):
    def __init__(self, x, y, color):
        self.x = x
        self.y = y
        self.color = color

    def draw_all(self, surface, ship_size):
        surface.fill((0, 0, 0))
        pygame.draw.rect(surface, self.color, (self.x, self.y, ship_size, ship_size))
        pygame.display.update()

    def move(self):
        keys = pygame.key.get_pressed()

        for key in keys:
            if keys[pygame.K_LEFT]:
                self.x -= 0.2
            if keys[pygame.K_RIGHT]:
                self.x += 0.2
            if keys[pygame.K_UP]:
                self.y -= 0.2
            if keys[pygame.K_DOWN]:
                self.y += 0.2

def main():
    width = 800
    height = 1000
    ship_size = 35
    difficulty = 0
    enemy_number = 12
    enemy_size = 35
    player = ship(width / 2, height - 100, (255, 0, 0))
    aliens = enemies(enemy_number, difficulty, enemy_size)
    screen = pygame.display.set_mode((width, height))
    enemy_list = 12
    run = True
    clock = pygame.time.Clock()
    aliens.add_enemies()

    while run:
        player.draw_all(screen, ship_size)
        player.move()
        aliens.move(screen)
        clock.tick(30)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
                pygame.display.quit()

main()
导入pygame
导入系统
随机输入
输入数学
pygame.init()
类(对象):
敌人=[]
定义初始(自身、敌人数量、差异、敌人大小):
self.敌军人数=敌军人数
self.diff=diff
self.敌军大小=敌军大小
def添加敌人(自身):
计数器=0
如果len(self.敌军)elif len(self.friends)>5和len(self.friends)您必须在应用程序的主循环中执行1次清除显示和1次显示更新。
分别从
.move()
方法中删除
.fill()
。清除显示一次,绘制所有对象,然后更新显示:

运行时:
时钟滴答(30)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
pygame.display.quit()
屏幕填充((0,0,0))
玩家。全部抽签(屏幕、发货尺寸)
player.move()
外星人。移动(屏幕)
pygame.display.update()
注意,您没有看到敌人,因为在
敌人.move()
中绘制单个敌人之前,显示是清晰的,而在
船舶.draw_all()中绘制船舶时,显示也是清晰的