2013-08-24 45 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()简化此操作,但请注意,您可能会错过快速按键。