2014-01-06 67 views
1

當我按w/a/s/d時,我希望我的角色向上/向左/向下/向右移動。我認爲應該發生的是,例如,當我按下d:爲什麼我的玩家角色不會移動?

  1. main()「看到的」,有一個事件發生

  2. 看到我按下一個鍵時

  3. player1.move()

  4. 看,關鍵是d

  5. Character.move_right(self)

  6. 更新x_posx_vel

  7. 回去main()

  8. player1.display()

  9. 繪製一個矩形只要更新x_posx_vel

  10. 更新屏幕

  11. 「滴答時鐘」

這顯然是沒有發生,雖然。我在哪裏誤解發生了什麼?

import sys 
import pygame 


class Character(object): 
    def __init__(self, surface, x_vel, y_vel, x_pos, y_pos): 
     self.surface = surface 
     self.x_vel = x_vel 
     self.y_vel = y_vel 
     self.x_pos = x_pos 
     self.y_pos = y_pos 
     self.size = (5, 20) 

    def move_right(self): 
     self.x_vel += 5 
     self.x_pos += self.x_vel 

    def move_left(self): 
     self.x_vel -= 5 
     self.x_pos += self.x_vel 

    def move_up(self): 
     self.y_vel -= 5 
     self.y_pos += self.y_vel 

    def move_down(self): 
     self.y_vel += 5 
     self.y_pos += self.y_vel 

    def move(self): 
     for event in pygame.event.get(): 
      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_w: 
        Character.move_up(self) 
       elif event.key == pygame.K_a: 
        Character.move_left(self) 
       elif event.key == pygame.K_s: 
        Character.move_down(self) 
       elif event.key == pygame.K_d: 
        Character.move_right(self) 
     self.character = pygame.Rect((self.x_pos, self.y_pos), self.size) 

    def display(self): 
     pygame.draw.rect(self.surface, (255, 255, 255), self.character) 

pygame.init() 

screen = pygame.display.set_mode((640, 480)) 
screen_rect = screen.get_rect() 

clock = pygame.time.Clock() 

fps = 30 


def main(): 
    while True: 
     for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
        pygame.quit() 
        sys.exit() 
       else: 
        player1 = Character(screen, 0, 0, 200, 200) 
        player1.move() 

     player1.display() 

     pygame.display.update(screen_rect) 
     clock.tick(fps) 

if __name__ == "__main__": 
    main() 
+0

問題似乎是,該事件被消耗什麼在'了'for'環main',所以'move'的'for'循環中沒有事件。 –

+3

您知道,對於與QUIT不同的每個事件,您都會創建一個新角色並將其分配給player1。 – Hyperboreus

回答

5

總結可能出現的錯誤:

由於@tobias_k指出您的活動已經消耗。這個問題可以這樣

def move(self, event): 
    if event.type == pygame.KEYDOWN: 
     if event.key == pygame.K_w: 
      .... 

def main(): 
    player1 = Character(screen, 0, 0, 200, 200) 
    while True: 
     for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
        pygame.quit() 
        sys.exit() 
       else: 
        player1.move(event) 

其次,移動形象塑造出來的主循環

def main(): 
    player1 = Character(screen, 0, 0, 200, 200) 
    while True: 
+0

我會把'player1.move(event)'改成'player1.handle_event(event)'因爲如果他增加了一個空間去拍攝一些東西,那不會再屬於移動方法了。 –

相關問題