我正在pygame中制作游戏,并且希望它可以多次产生东西

问题描述

我正在pygame中制作一个游戏,我希望它可以在不同的地方多次生成事物,但是使用我的代码,它可以多次生成事物,但它不会保留在生成的位置。我知道这是因为它处于while循环中而发生了。请尽可能用简单的语言解释。这是代码

def spawn_food():
    food = Food(random.randint(3,797),random.randint(3,797))
    food.draw()


player1 = Player(250,200)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    keys = pygame.key.get_pressed()
    if keys[pygame.K_RIGHT]:
        player1.x += 1
    if keys[pygame.K_LEFT]:
        player1.x -= 1
    if keys[pygame.K_UP]:
        player1.y -= 1
    if keys[pygame.K_DOWN]:
        player1.y += 1
    screen.fill((255,255,255))
    player1.draw()
    pygame.display.update()

解决方法

spawn_food()需要返回一个新的Food对象:

def spawn_food():
    return Food(random.randint(3,797),random.randint(3,797))

您必须将Food的实例添加到列表中:

food_list = []
for i in range(5):
    food_list.append(spawn_food())

分别

food_list = [spawn_food() for _ in range(5)]

在应用程序循环内的循环中绘制food_list的元素:

while True:
    # [...]

    screen.fill((255,255,255))

    for food in food_list:
        food.draw()

    player1.draw()
    pygame.display.update()