2015-09-05 38 views
0

因此,我正在編寫一個pygame程序,其中矩形從屏幕頂部連續不斷地下降,玩家可以移動矩形來捕捉它們。問題是,當我運行該程序時,矩形不會自行完成。只有當你開始移動角色時,或者當你輸入某種形式的輸入時,它們纔會下降。輸入結束後它們停止下降。這是爲什麼發生?我覺得它可能與我的FPS設置有關,但是我之前也做過類似的程序,而沒有發生這個問題。有人可以告訴我發生了什麼事嗎?爲什麼我的pygame屏幕是靜態的?

在此先感謝

`import pygame, sys,random,time 
from pygame.locals import* 

pygame.init() 
mainClock=pygame.time.Clock() 

WINDOWWIDTH=400 
WINDOWHEIGHT=400 
windowSurface=pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT),0,32) 
pygame.display.set_caption('Input with Falling Food') 

BLACK=(0,0,0) 
GREEN=(0,255,0) 
WHITE=(255,255,255) 

MOVESPEED=20 

FOODSIZEMAX=30 
FOODSIZEMIN=10 

FOODMOVESPEED=30 

foodCounter=0 
NEWFOOD=5 

player=pygame.Rect(300,100,50,50) 
foods=[] 
for i in range(10): 
    FOODSIZE=random.randint(FOODSIZEMIN,FOODSIZEMAX) 
    foods.append(pygame.Rect(random.randint(0,WINDOWWIDTH-FOODSIZE),0,FOODSIZE,FOODSIZE)) 

moveLeft=False 
moveRight=False 
moveUp=False 
moveDown=False 



while True: 
    for event in pygame.event.get(): 
     if event.type==QUIT: 
      pygame.quit() 
      sys.exit() 
     if event.type==KEYDOWN: 
      if event.key==K_LEFT or event.key==ord('a'): 
       moveRight=False 
       moveLeft=True 
      if event.key==K_RIGHT or event.key==ord('d'): 
       moveLeft=False 
       moveRight=True 
      if event.key==K_UP or event.key==ord('w'): 
       moveDown=False 
       moveUp=True 
      if event.key==K_DOWN or event.key==ord('s'): 
       moveUp=False 
       moveDown=True 
     if event.type==KEYUP: 
      if event.key==K_ESCAPE: 
       pygame.quit() 
       sys.exit() 
      if event.key==K_LEFT or event.key==ord('a'): 
       moveLeft=False 
      if event.key==K_RIGHT or event.key==ord('d'): 
       moveRight=False 
      if event.key==K_UP or event.key==ord('w'): 
       moveUp=False 
      if event.key==K_DOWN or event.key==ord('s'): 
       moveDown=False 
      if event.key==ord('x'): 
       player.top=random.randint(0,WINDOWHEIGHT-player.height) 
       player.left=random.randint(0,WINDOWWIDTH-player.width) 

     if event.type==MOUSEBUTTONUP: 
      foods.append(pygame.Rect(event.pos[0],event.pos[1],FOODSIZE,FOODSIZE)) 

     foodCounter+=1 
     if foodCounter>=NEWFOOD: 
      foodCounter=0 
      FOODSIZE=random.randint(FOODSIZEMIN,FOODSIZEMAX) 
      foods.append(pygame.Rect(random.randint(0,WINDOWWIDTH-FOODSIZE),0,FOODSIZE,FOODSIZE)) 

     windowSurface.fill(BLACK) 

     if moveDown and player.bottom<WINDOWHEIGHT: 
      player.top+=MOVESPEED 
     if moveUp and player.top>0: 
      player.top-=MOVESPEED 
     if moveLeft and player.left>0: 
      player.left-=MOVESPEED 
     if moveRight and player.right<WINDOWWIDTH: 
      player.right+=MOVESPEED 

     pygame.draw.rect(windowSurface,WHITE,player) 

     for i in range(len(foods)): 
      foods[i].top+=FOODMOVESPEED 


     for food in foods[:]: 
      if player.colliderect(food): 
       foods.remove(food) 
     for food in foods[:]: 
      if food.top>=WINDOWHEIGHT: 
       foods.remove(food) 

     for i in range(len(foods)): 
      pygame.draw.rect(windowSurface,GREEN,foods[i]) 

     pygame.display.update() 
     #mainClock.tick(40) 
     #time.sleep(0.02) 

回答

0

您需要打破你的主循環碼出for event in pygame.event.get():循環。

也就是說,每當時鐘滴答(不只是當遊戲收到輸入事件時),你想運行的所有東西都應該在該循環之外,就在主循環while中。

最起碼,對於食品中移動:

for i in range(len(foods)): 
     foods[i].top+=FOODMOVESPEED 

需要採取出來。

相關問題