2013-04-10 73 views
-1

我試圖同時按鍵被按下時,使圖像的舉動。它移動但不流暢,它不會繼續移動,因爲按鈕被按下。使圖像移動鍵的同時按下

import pygame, sys 
from pygame.locals import * 

white=(255,255,255) 
black=(0,0,0) 

pygame.init() 
window=pygame.display.set_mode((640, 360),0,32) 
image=pygame.image.load("white.png") 
image.set_colorkey(white) 

x,y=0,0 
movex,movey=0,0 

while True: 
    window.fill(black) 
    for event in pygame.event.get(): 
     if event.type==QUIT: 
      pygame.quit() 
      sys.exit() 
     if event.type==KEYDOWN: 
      if event.key==K_LEFT: 
       movex+=-1 
      elif event.key==K_RIGHT: 
       movex+=1 
      elif event.key==K_UP: 
       movey+=-1 
      elif event.key==K_DOWN: 
       movey+=1 
    x=movex 
    y=movey 

    window.blit(image,(x,y)) 
    pygame.display.update() 
+0

請解決您的縮進 – 2013-04-10 01:30:30

+0

它無關,與這一點。 – user2250873 2013-04-10 01:49:27

+1

它可能不會,但它會讓您的代碼更容易讓其他人閱讀並複製/粘貼 – 2013-04-10 01:54:06

回答

-4

我想你必須啓用某種重複功能。 據this (your) example

pygame.key.set_repeat(50, 50) 

應該做的工作。

說明quoted

set_repeat()什麼和它的兩個參數?默認情況下, 鍵重複功能被禁用,即默認,當您按下 並按住一個鍵沒有什麼好說的。沒有事件會產生。

set_repeat的兩個參數是延遲和時間間隔。當您按 並按住某個鍵時,第一個事件將在延遲毫秒後生成。 連續事件在間隔 毫秒之後生成。

如果這仍撲朔迷離那麼這個例子可以幫助你。考慮 我正在拿着鑰匙。這是事件代將看起來像 。

[1st up event] ... [2nd up event] ... [3rd up event] ...依此類推。

的[第一向上事件]是其中鍵被按壓並保持。並在 延遲millisecs後生成[2nd up event]。然後剩下的 事件產生的每個間隔的毫秒直到關鍵 被釋放。

+0

謝謝,但你能解釋它是如何工作的,如果不行的話。 – user2250873 2013-04-10 03:02:02

+0

這個答案爲什麼downvoted? – Saucier 2013-04-10 11:18:15

+2

此解決方案堵塞事件隊列。多米尼克的解決方案是你正在尋找的 – 2013-04-10 12:50:54

8

您正在尋找K_DOWN活動,讓你的形象只會移動按鈕被按下(或當OS告訴你這樣)的時刻。

一個更好的想法是,要檢查是否某些鍵被按下了主循環的每一次迭代使用pygame.key.get_pressed()

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

pressed = pygame.key.get_pressed() 
if pressed[K_LEFT]: 
    movex+=-1 
if pressed[K_RIGHT]: 
    movex+=1 
if pressed[K_UP]: 
    movey+=-1 
if pressed[K_DOWN]: 
    movey+=1 

x=movex 
y=movey 
... 
+1

我認爲宇部的答案是好的,因爲它的工作 – user2250873 2013-04-12 00:22:35