2013-04-21 67 views
0

由於某些原因,箭頭鍵不會移動「guy.png」精靈。有沒有人有解釋爲什麼?是的,精靈顯示在屏幕上,是的,guy.png與項目位於同一個文件夾下。屏幕上的字符不會移動(pygame)

代碼:

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事件,讓你的精靈將停止時,你會釋放鍵。