更改y_positions移动时,之前的精灵停留

时间:2016-04-05 01:28:37

标签: pygame

我制作了一个游戏,玩家可以控制一个可以捕获食物的精灵。

但是,我在食物掉落方面遇到了麻烦。

import pygame
import random
import time

d_w = 800
d_h = 600
fall_speed = 5

screen = pygame.display.set_mode((d_w, d_h))

clock = pygame.time.Clock()

BGCOLOR = (0, 155, 0)

goodFood = pygame.image.load('burg.png')

def randFoodGen():
    x_food = d_w/2
    y_food = 0
    return x_food,y_food

def BurgGen():
    x_food, y_food = randFoodGen()
    screen.fill(BGCOLOR)
    while True:
        y_food = y_food + fall_speed
        if y_food > d_w:
            x_food = (random.randrange(0, d_w))
            y_food = -30
        screen.blit(goodFood, [x_food, y_food])
        pygame.display.update()
        clock.tick(30)

BurgGen()

它最终会保留掉落的食物雪碧的先前位置,如下所示: Anger

1 个答案:

答案 0 :(得分:1)

您的screen.fill(BGCOLOR)需要在while循环中。

def BurgGen():
    x_food, y_food = randFoodGen()
    while True:
        screen.fill(BGCOLOR)
        y_food = y_food + fall_speed
        if y_food > d_w:
            x_food = (random.randrange(0, d_w))
            y_food = -30
        screen.blit(goodFood, [x_food, y_food])
        pygame.display.update()
        clock.tick(30)

这至少可以解决持久的汉堡问题。原因是在你画一个新的汉堡之前,你必须擦拭你以前画过的汉堡的画面。

此外,如果您要使用多个坠落物体,则可能需要使用pygame.Rect来表示每个坠落物体。您可能还想制作那些pygame.Rect对象的python列表。

falling_objects = []  # create empty list

每当你需要创建一个新的下降对象时,创建一个pygame.Rect并将它包含在列表中。

new_object = pygame.Rect(x, y, width, height)
falling_objects.append(new_object)

然后,要更新对象位置,请遍历列表并更新Rects

for obj_rect in falling_objects:
    obj_rect.move_ip(0, fall_speed)

使用类似的for循环在每个位置blit图像

for obj_rect in falling_objects:
    screen.blit(food_image, obj_rect.top_left)

有点深入,但我希望有所帮助。