2014-12-31 2 views
0

그냥 왼쪽이나 오른쪽으로 움직이기를 원하지만 keydown 코드가 통과하지 못하는 이유는 없습니다. 프로그램을 열면 위치에 '탱크'가 표시되지만 왼쪽 또는 오른쪽 키로는 이동할 수 없습니다.파이 게임을위한 Keydown 이벤트

import pygame, sys 
from pygame.locals import * 

WINDOW_WIDTH = 800 
WINDOW_HEIGHT = 600 
TANK_SIZE = 20 

BLACK = (0 ,0 ,0 ) 
WHITE = (255,255,255) 

def drawArena(): 
    DISPLAYSURF.fill(BLACK) 

def drawTank(tank): 
    pygame.draw.rect(DISPLAYSURF, WHITE, tank) 

def main(): 
    pygame.init() 
    global DISPLAYSURF 
    DISPLAYSURF = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) 
    pygame.display.set_caption('Tanks') 

    tankX = 200 
    tankY = 200 

    tank = pygame.Rect(tankX, tankY, TANK_SIZE, TANK_SIZE) 

    drawArena() 
    drawTank(tank) 

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

      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_LEFT: 
        tankX -= 20 
       if event.key == pygame.K_RIGHT: 
        tankX += 20 

     drawArena() 
     drawTank(tank) 

     pygame.display.update() 

if __name__ == '__main__': 
    main() 

답변

0

업데이트 tankX 값이 tank 객체에 영향을주지 않기 때문입니다. 그것을 작동시키는 많은 방법이 있습니다. 예를 들어, while True 루프 탱크의 재 초기화를 삽입 : 이것은 tank 사각형 개체에 영향을주지 않는

import pygame, sys 
from pygame.locals import * 

WINDOW_WIDTH = 800 
WINDOW_HEIGHT = 600 
TANK_SIZE = 20 

BLACK = (0 ,0 ,0 ) 
WHITE = (255,255,255) 

def drawArena(): 
    DISPLAYSURF.fill(BLACK) 

def drawTank(tank): 
    pygame.draw.rect(DISPLAYSURF, WHITE, tank) 

def main(): 
    pygame.init() 
    global DISPLAYSURF 
    DISPLAYSURF = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) 
    pygame.display.set_caption('Tanks') 

    tankX = 200 
    tankY = 200 

    tank = pygame.Rect(tankX, tankY, TANK_SIZE, TANK_SIZE) 

    drawArena() 
    drawTank(tank) 

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

      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_LEFT: 
        tankX -= 20 
       if event.key == pygame.K_RIGHT: 
        tankX += 20 

     tank = pygame.Rect(tankX, tankY, TANK_SIZE, TANK_SIZE) 

     drawArena() 
     drawTank(tank) 

     pygame.display.update() 

if __name__ == '__main__': 
    main() 
0

당신은 tankX 및 tankY 변수를 갱신하지 않아야합니다. 리소스가 아마도 낭비이기 때문에 tank 개체를 다시 초기화 할 필요가 없습니다. 보다 효율적인 방법은 객체의 move_ip() 함수를 사용하여 tank 객체의 x 및 y 값을 직접 업데이트하는 것입니다. 메인 루프에서

...

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

     if event.type == pygame.KEYDOWN: 
      if event.type == pygame.K_LEFT: 
       tank.move_ip(-20, 0) 
      if event.type == pygame.K_RIGHT: 
       tank.move_ip(20, 0) 

    drawArena() 
    drawTank(tank) 

    pygame.display.update()