2013-04-10 3 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

해결하세요 그것은 그와 아무 상관이있다 –

+0

들여 쓰기. – user2250873

+1

아마 그렇지 않지만 다른 사람들이 읽고 복사/붙이기가 훨씬 쉬워 진 코드 –

답변

-4

일종의 반복 기능을 사용하도록 설정해야한다고 생각합니다. this (your) example에 따르면 ,

pygame.key.set_repeat(50, 50) 

가 작업을 수행해야합니다.

설명 quoted :

set_repeat()와 그리고이 두 개의 인수 무엇

? 기본적으로 키 반복 기능이 사용 중지됩니다. 즉, 키를 누르고 키를 누르고 있으면 기본값이 아무것도 아닙니다. 이벤트가 생성되지 않습니다.

set_repeat의 두 인수는 지연과 간격입니다. 을 누르고 키를 누르면 첫 번째 이벤트가 지연 밀리 초 후에 생성됩니다. 연속 이벤트는 밀리 초 간격 후에 생성됩니다.

여전히 혼란스러운 경우이 예가 도움이 될 수 있습니다. 고려해보십시오 위로 키를 잡고 있습니다. 이것은 이벤트 발생이 처럼 보일 것입니다.

[첫 번째 이벤트] ... [두 번째 이벤트] ... [세 번째 이벤트] ... 등등.

[첫 번째 이벤트]는 키를 누른 상태를 유지하는 곳입니다. 지연 밀리 초가 지나면 [두 번째 상승 이벤트]가 생성됩니다. 그리고 키가 해제 될 때까지 간격 밀리 초마다 나머지 이벤트가 생성됩니다. 이미지 만 버튼 (또는 OS가 당신을 알려줍니다 때마다 때문에) 아래로 누르는 순간 이동합니다 있도록

+0

고마워요,하지만 괜찮은지 어떻게 작동하는지 설명 할 수 있어요. – user2250873

+0

왜이 답변을 거절 했습니까? – Saucier

+2

이 솔루션은 이벤트 대기열을 막습니다. 도미닉의 해결책은 당신이 찾고있는 것입니다 –

8

당신은 K_DOWN 이벤트를 찾고 있습니다.

더 좋은 아이디어는 특정 키는 메인 루프의 각 반복을 누를 경우 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

관련 문제