2014-11-07 9 views
1

나는 내 학교의 컴퓨터 클럽을 위해 약간의 마리오를 만들고 있습니다. (음, 팀의 일원으로) 어쨌든 "keyup/keydown"명령에 문제가 있습니다.파이 게임 키 업/키 다운

# 1 - Import library 
import pygame 
from pygame.locals import * 

# 2 - Initialize the game 
pygame.init() 
width, height = 1280, 1000 
screen=pygame.display.set_mode((width, height)) 
keys = [False, False, False, False] 
playerpos=[100,100] 

# 3 - Load images 
player = pygame.image.load("images/totallynotgodzilla.png") 
# 3.1 - Load Audio 
music = pygame.mixer.Sound("audio/skyrim.wav") 

# 4 - keep looping through 
while 1: 
    # 5 - clear the screen before drawing it again 
    screen.fill(0) 
    # 6 - draw the screen elements 
    screen.blit(player, playerpos) 
    # 7 - update the screen 
    pygame.display.flip() 
    # 8 - loop through the events 
    for event in pygame.event.get(): 
     if event.type == pygame.KEYDOWN: 
      if event.key==K_w: 
       keys[0]=True 
      elif event.key==K_a: 
       keys[1]=True 
      elif event.key==K_s: 
       keys[2]=True 
      elif event.key==K_d: 
       keys[3]=True 
     if event.type == pygame.KEYUP: 
      if event.key==pygame.K_w: 
       keys[0]=False 
      elif event.key==pygame.K_a: 
       keys[1]=False 
      elif event.key==pygame.K_s: 
       keys[2]=False 
      elif event.key==pygame.K_d: 
       keys[3]=False 

     # 9 - Move player 
     if keys[0]: 
      playerpos[1]-=5 
     elif keys[2]: 
      playerpos[1]+=5 
     if keys[1]: 
      playerpos[0]-=5 
     elif keys[3]: 
      playerpos[0]+=5 

기본적으로, 문제는 내가 아래로 키를 누를 때의 keyup 명령이 다시 이동하기 전에 발생하는 것은 기다리는 것입니다 : 여기에 내 코드입니다. 그래서 기본적으로 나는 버튼을 빠르게 움직여서 움직여야합니다.

일부 코드가 삭제되었으므로 빠진 것이 있으면 알려주세요. 내가 가지고 있는지 여부를 알려 드리겠습니다.

답변

3

들여 쓰기 문제. 기본 게임 루프에서 주요 루프를 테스트 할 필요가 없습니다. 하나의 레벨에서 키스톤 테스트를 취소해야합니다.

while 1: 
    # do init stuff 
    screen.fill(0) 
    # .... (all main loop init stuff here) 

    for event in pygame.event.get(): 
     # test events, set key states 
     if event.type == pygame.KEYDOWN: 
      if event.key==K_w: 
       keys[0]=True 
     # .... (all event stuff) 

    # Indent moves back to main game loop 
    # test key states here... 
    if keys[0]: 
     playerpos[1]-=5 
    elif keys[2]: 
     playerpos[1]+=5 
    # .... (and so on)