2013-11-23 97 views
0

我想通過使用向上和向下的箭頭在Pong遊戲中移動一個槳。我通過一個事件處理循環來做這件事。下面是事件處理循環的代碼:Pygame雪碧沒有更新

for event in PE.get(): 
     if event.type == PG.KEYDOWN: 
      keystate = PG.key.get_pressed() 
      if event.key == PG.K_ESCAPE: 
       done = True 
      if keystate[PL.K_UP]: 
       rightPaddle.update(-10) 
      if keystate[PL.K_DOWN]: 
       rightPaddle.update(10) 
     if event.type == PG.QUIT: 
      done = True 

更新功能如下所示:

def update(self, move): 
     self.toplefty += move 

這裏是PaddleSprite類:

def __init__(self, x, y): 
     PG.sprite.Sprite.__init__(self) 
     self.image = PG.Surface([15,100]) 
     self.topleftx = x 
     self.toplefty = y 
     self.rect = self.image.get_rect 
     self.rect.move_ip(self.topleftx, self.toplefty) 

    def draw(self, surface): 
     surface.fill(PINK, self.rect) 

    def update(self, move): 
     self.toplefty += move 

簡而言之,更新基本上是矩形的槳的函數根據點擊向上或向下箭頭的次數將矩形的左上角移動到新的y位置。每個向上或向下箭頭在正方向或負方向上遞增槳距10。但是,在我的程序中,當我向上或向下按下時,槳沒有移動。誰能告訴我爲什麼?此外,在按住向上或向下鍵的同時,是否可以移動槳葉,而不是多次按下它來移動槳葉?

+0

您可以發佈完整程序的源代碼嗎? –

+0

到目前爲止您嘗試了哪種調試?事件處理程序中的任何打印語句,以驗證是否已達到座標調整邏輯? –

+0

我在事件驅動的循環中添加了打印語句,以查看它是否會識別鍵和鍵的事件。當我按下按鍵時它會打印出來,但槳不會移動,這非常令人困惑。 –

回答

1

看起來您已經組合了2種檢查輸入的方式。他們似乎有衝突。 讓我們一起來看看:

for event in PE.get(): 

這就是所謂的事件循環,什麼pygame的呢,是商店已發生的所有事件的輸入隊列中,一個get(),從隊列彈出值。其他方法是PG.key.get_pressed()

這是更多的硬件方法,因爲它返回一組按鈕狀態。

要解決這個問題,我建議刪除get_pressed()調用以及keystate []檢查,並用event.key == PG.K_UP替換它們。

編輯:

看來你的錯誤是設定self.toplefty的變量,但使用self.rect繪製。您應該使用self.rect.move_ip來更新,以便它移動實際的矩形。

+0

我做了更改,但槳仍然不動。我在事件處理循環中放置了打印語句,以查看它是否識別我是按下向上鍵還是向下鍵。這意味着它可能與我的update()方法有關,但我不確定它有什麼問題 –

0

以下是我得到它的工作:

def update(self, move): 
     self.rect.centerx += 0 
     self.rect.centery += move 

從本質上講,這個問題必須是與更新,因爲事件驅動循環的認可或我按上下。所以我剛剛得到了精靈的Rect對象並將它的中心移動到垂直軸上。感謝所有評論或回答的人!