2013-04-21 2 views
0

어떤 이유로 화살표 키는 "guy.png"스프라이트를 움직이지 않습니다. 이유에 대한 설명이있는 사람이 있습니까? 예, 스프라이트가 화면에 나타나고 예, guy.png는 프로젝트와 동일한 폴더 아래에 있습니다.화면상의 문자가 움직이지 않습니다 (파이 게임)

코드 : 당신이 당신의 남자 이벤트 기능을 입력하는 대신 키를 검사하기 때문에

import pygame, sys 
from pygame.locals import * 
pygame.init() 
screen = pygame.display.set_mode((500, 500), 0, 32) 
guy_sprite = pygame.image.load("guy.png") 
wall_sprite = pygame.image.load("wall.png") 

class guy_class(pygame.sprite.Sprite): 
    def __init__(self, surface): 
     self.surface = surface 
     self.x = 250 
     self.y = 250 
     self.vx = 0 
     self.vy = 0 
     self.sprite = guy_sprite 

    def event(self, event): 
     if event.type == pygame.K_UP: 
      self.vy = -1 
     elif event.type == pygame.K_DOWN: 
      self.vy = 1 
     elif event.type == pygame.K_LEFT: 
      self.vx = -1 
     elif event.type == pygame.K_RIGHT: 
      self.vx = 1 

    def move(self): 
     self.x += self.vx 
     self.y += self.vy 

    def draw(self, surface): 
     surface.blit(self.sprite, (int(self.x), int(self.y))) 

    def position(self): 
     return self.x, self.y 

class wall_class(pygame.sprite.Sprite): 
    def __init__(self, surface): 
     self.x = 100 
     self.y = 250 
     self.vx = 0 
     self.vy = 0 
     self.sprite = wall_sprite 

    def draw(self, surface): 
     surface.blit(self.sprite, (self.x, self.y)) 

def end_game(): 
    pygame.quit() 
    sys.exit() 

clock = pygame.time.Clock() 
guy = guy_class(screen) 
wall = wall_class(screen) 

while True: 
    screen.fill((0, 0, 0)) 
    guy.move() 
    guy.draw(screen) 

    for event in pygame.event.get(): 
     if event.type == QUIT: 
      end_game() 
     elif event.type == pygame.KEYDOWN: 
      guy.event(event) 

    clock.tick(100) 
    pygame.display.update() 

답변

1

스프라이트가 움직이지 않는 이유입니다.

그래서이로 변경 :

def event(self, event): 
    if event.key == pygame.K_UP: 
     self.vy = -1 
    elif event.key == pygame.K_DOWN: 
     self.vy = 1 
    elif event.key == pygame.K_LEFT: 
     self.vx = -1 
    elif event.key == pygame.K_RIGHT: 
     self.vx = 1 

당신은 또한 KEY_UP 이벤트를 확인해야합니다, 그래서 당신이 키를 놓을 때 당신의 스프라이트가 중지됩니다.