2016-04-05 34 views
0

我正在製作一個遊戲,玩家控制一個捕捉落下食物的精靈。以前的精靈在改變y_positions時要留下來移動

但是,我遇到了食物下降的問題。

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

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並.append到列表中。

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) 

有點深入但我希望能有所幫助。