2016-08-21 51 views
0
import pygame 
from pygame.locals import * 

... 
... 

while True: 
    #comment 
    for event in pygame.event.get(): 
     if event.type == KEYDOWN: 
     key_pressed = pygame.key.get_pressed() 
     #do something 

我用print語句替換#comment,發現for loop是根本不能執行即,打印語句被無限運行。pygame.event.get()不返回任何事件

我期待的是,get_pressed()返回按下按鍵,只要按下鍵,但它沒有發生。

上述代碼有什麼問題,我該如何糾正它?

編輯:添加鏈接python腳本文件 python script

回答

2

pygame.event.get()抓住所有已在事件隊列中記錄的事件,並讓他們在他們發生的順序。 pygame.key.get_pressed()只有在那一刻被按下的鍵。這意味着當你的遊戲試圖訪問它們時必須按下它們。

您不需要同時使用這兩種方法。相反,只需循環處理事件,並在某個鍵與您需要的鍵相匹配時執行某些操作。一個常見的事情是對下面顯示的光標鍵作出反應:

import pygame 
from pygame.locals import * 

pygame.init() 
... 
... 

while True: 
    #comment 
    for event in pygame.event.get(): 

     if event.type == KEYDOWN: 

      if event.key == pygame.K_DOWN: 
       print('Down was pressed') 

      if event.key == pygame.K_UP: 
       print('Up was pressed') 

      if event.key == pygame.K_RIGHT: 
       print('Right was pressed') 

      if event.key == pygame.K_LEFT: 
       print('Left was pressed') 
+0

我照你提到的那樣做了。我打開終端並運行'$ python control.py'命令,但是當我按下key_up按鈕(窗口焦點在終端上)時,我得到以下輸出:[^ [[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^['並且執行進入for循環看起來不像。我在啓動Python代碼的方式做錯了嗎?或出了什麼問題? – djvu

+0

Python正在啓動,但您不應該通過控制檯與pygame進行交互。它應該打開一個GUI窗口,你可以看到遊戲。你在開始遊戲循環之前調用了'pygame.init'嗎?我會編輯我的答案,使其更加完整。 –

+0

是的,我調用了'pygame.init()'方法,但沒有彈出GUI窗口。有什麼我失蹤?我已經通過添加鏈接到python腳本來編輯這個問題 – djvu