我制作了一个游戏,玩家可以控制一个可以捕获食物的精灵。
但是,我在食物掉落方面遇到了麻烦。
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
答案 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)
有点深入,但我希望有所帮助。