2013-08-24 70 views
-5

我在pygame上做了Pong遊戲,但它還沒有完成。代碼中的變量,類和其他東西的名稱都是用葡萄牙語的,但我認爲很容易知道這是什麼。該代碼應該使用戶想要的時候移動兩個撥片,但它只顯示背景和撥片。我沒有收到任何錯誤消息。這個pygame程序有什麼錯誤?

下面的代碼:

import pygame,sys,os,time 
from pygame.locals import * 
pygame.init() 

janela=pygame.display.set_mode((800, 533),0,32) 
pygame.display.set_caption("Pong!") 
superficie=pygame.display.get_surface() 

clock=pygame.time.Clock() 

fundoFicheiro=os.path.join("Imagens","fundo2.png") 
fundoImagem=pygame.image.load(fundoFicheiro).convert() 

barraFicheiro=os.path.join("Imagens","barra.png") 
barraImagem=pygame.image.load(barraFicheiro).convert_alpha() 

def imprimirBarra(x,y): 
     janela.blit(barraImagem,(x,y)) 



class barra(): 
    y=1 
    x=1 
    velocidade=1 
    def subir(self): 
     self.y-=self.velocidade 
    def descer(self): 
     self.y+=self.velocidade 
    def parar(self): 
     self.velocidade=0 
    def comecar(self): 
     self.velocidade=1  


barra1=barra() 
barra1.x=5 
barra1.y=superficie.get_height()/2-barraImagem.get_height()/2 
barra2=barra() 
barra2.velocidade=1 
barra2.x=superficie.get_width()-(barraImagem.get_width()+5) 
barra2.y=superficie.get_height()/2-barraImagem.get_height()/2 

def interface(): 
    for event in pygame.event.get(): 
     if event.type==KEYDOWN: 
      if event.key==K_UP: 
       barra2.comecar() 
       barra2.subir() 
      elif event.key==K_DOWN: 
       barra2.comecar() 
       barra2.descer() 
      elif event.key==K_w: 
       barra1.comecar() 
       barra1.subir() 
      elif event.key==K_s: 
       barra1.comecar() 
       barra1.descer() 
     elif event.type==KEYUP: 
      if event.key==K_UP: 
       barra2.parar() 
      elif event.key==K_DOWN: 
       barra2.parar() 
      elif event.key==K_w: 
       barra1.parar() 
      elif event.key==K_s: 
       barra1.parar() 




while True: 
    clock.tick(60) 
    for event in pygame.event.get(): 
     if event.type==QUIT: 
      pygame.quit() 
      sys.exit() 
    janela.blit(fundoImagem,(0,0))   
    imprimirBarra(barra1.x,barra1.y) 
    imprimirBarra(barra2.x,barra2.y) 
    interface() 
    pygame.display.update() 
+0

問題是什麼?具有描述性。 StackOverflow不是轉儲代碼並讓其他人爲您調試的地方。如果您收到錯誤消息,請將其填入您的問題中。如果程序中某個特定的東西不起作用,請描述它並將其追蹤到特定的功能/行。 – Sumurai8

+0

對不起,不是非常具體,也許在代碼中犯了一個愚蠢的錯誤。我是python和pygame的新手,這是我第一次在StackOverflow中發佈一些東西。 – user2713343

回答

0
for event in pygame.event.get(): 
    if event.type==QUIT: 
     pygame.quit() 
     sys.exit() 

pygame.event.get()給你,因爲你把它稱爲最後一次發生的所有事件。該循環使用當前可用的所有事件。因此,當interface()被調用,並且它再次嘗試pygame.event.get()時,沒有更多事件需要檢查按鍵(除非這些事件發生在調用janela.blit調用時,但它們應該非常快;不確定是否Pygame無論如何將在這些通話期間處理事件)。

另一個問題是,當按下按鍵時,你只會得到KEYDOWN事件,連續同時舉行(除非你用pygame.key.set_repeat()配置它,但是這可能與你的邏輯其餘干擾)。因此,您的代碼已設置爲在按住鍵的同時連續移動槳,但由於.subir.descer只在每次按鍵時被調用一次,因此它不會執行任何操作。

有很多方法可以解決這個問題,但無論如何你必須重新構造一些東西。我的建議是在程序中只有一個循環來處理事件,並將它們翻譯成某種數據結構(例如,它可能有一個set,其中的鍵當前被按下,而且哪些鍵自上次更改)。您可能可以通過pygame.key.get_pressed()簡化此操作,但請注意,您可能會錯過快速按鍵。