2015-08-20 112 views
1

我是pygame的新手,並且正在製作遊戲。我有一個角色,我正在努力讓雙腿移動。有2張圖片,如何讓他們切換? 人物是藍色精靈。誰能幫忙?謝謝大家如何動畫一個pygame角色走路,當我點擊移動

import pygame 
import time 
time_start = time.time() 
seconds = 0 
pygame.init() 
time = pygame.time.get_ticks() 
timeStep = 1000 
display_width = 1500 
display_height = 750 
originx = 0 
originy = 0 
gameDisplay = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption('Game') 
black = (0,0,0) 
white = (255,255,255) 
dollarBill = pygame.image.load('DollarBill.png') 
clock = pygame.time.Clock() 
killed = False 
manImg = pygame.image.load('Wizard1Front.png') 
manImgt = pygame.image.load('Wizard1Front.png') 
wfo = True 
def dollarbill(dx,dy): 
    gameDisplay.blit(dollarBill, (dx,dy)) 
def blueWizard(x,y): 
    if wfo == True: 
     gameDisplay.blit(manImg, (x,y)) 
    else: 
     gameDisplay.blit(manImgt, (x,y)) 
x = (display_width * 0.45) 
y = (display_height * 0.8) 
dx = (display_width * 0.45) 
dy = (display_height * 0.8) 
#key response 
key_left = False 
key_right = False 
key_up = False 
key_down = False 
right_ctrl = False 
ctrl_left = False 
ctrl_right = False 
ctrl_up = False 
ctrl_down = False 
while not killed: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      crashed = True 
      pygame.quit() 
      quit() 
     ############################ 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       key_left = True 
       ctrl_left = True 
      elif event.key == pygame.K_RIGHT: 
       key_right = True 
       ctrl_right = True 
      elif event.key == pygame.K_UP: 
       key_up = True 
       ctrl_up = True 
      elif event.key == pygame.K_DOWN: 
       key_down = True 
       ctrl_down = True 
      elif event.key == pygame.K_RCTRL: 
       right_ctrl = True 
     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT: 
       key_left = False 
       ctrl_left = False 
      if event.key == pygame.K_RIGHT: 
       key_right = False 
       ctrl_right = False 
      if event.key == pygame.K_UP: 
       key_up = False 
       ctrl_up = False 
      if event.key == pygame.K_DOWN: 
       key_down = False 
       ctrl_down = False 
     ###################### 
    ##what the keys do 
    if key_right == True and x < (display_width - 74): 
     x += 2.5 
    if key_left == True and x > 0: 
     x += -2.5 
    if key_up == True and y > 0: 
     y += -2.5 
    if key_down == True and y < (display_height - 113): 
     y += 2.5 
    if right_ctrl == True: 
     dx += 20 
    if ctrl_left == True: 
     dx += -2.5 
    if ctrl_right == True: 
     dx += 2.5 
    if ctrl_up == True: 
     dy += -2.5 
    if ctrl_down == True: 
     dy += 2.5 
    ##extra logic 
    if dx > (display_width) or dy > (display_height): 
     dx = x 
     dy = y 
     right_ctrl = False 
    if dx < (originx) or dy < (originy): 
     dx = x 
     dy = y 
     right_ctrl = False 
    gameDisplay.fill(black) 
    blueWizard(x,y) 
    dollarbill(dx,dy) 
    pygame.display.update() 
    clock.tick(60) 
pygame.quit() 
quit() 

回答

0
wfo = False 
def blueWizard(x,y): 
    if wfo == True: 
     gameDisplay.blit(manImg, (x,y)) 
    else: 
     gameDisplay.blit(manImgt, (x,y)) 

如果這是你的性格顯示的東西,那麼你可以這樣做:

wfo = False 
def set_wfo(): 
    global wfo #you can now use wfo if any other functions 
set_wfo() 
def blueWizard(x,y): 
    if wfo == True: 
     gameDisplay.blit(manImg, (x,y)) 
     wfo = False 
    else: 
     gameDisplay.blit(manImgt, (x,y)) 
     wfo = True 

我不是PC,所以我cant't檢查它,但我希望它工作:),也許不是。 現在,當我看着它時,你可能不應該使用這個函數,而只是用它的代碼替換你調用它的地方,這個函數沒有真正的用處,它只會使事情變得複雜...... 同樣登場了if a == True:您可以使用if a:

,取而代之的

key_left = False 
key_right = False 
key_up = False 
key_down = False 
right_ctrl = False 
ctrl_left = False 
ctrl_right = False 
ctrl_up = False 
ctrl_down = False 

你可以有

key_left, key_right, key_up, key_down, right_ctrl, ctrl_left, ctrl_right, ctrl_up, ctrl_down = [False]*9 

但我會移動的按鍵做什麼轉換爲檢查系統WHE如果你正在瀏覽thrue事件,它會更短,沒有別的會改變真的...

看看pygame.sprite.Group以及,它們是非常有用的。我沒有提到的任何事情?

1

雖然這個例子可能工作一個簡單的兩個圖像移動精靈,你真正想要做的就是使用精靈表。

Sprite表是傳統上在遊戲(原始NES,世嘉等)中的運動方式。

基本的想法是,你有一個大圖像的所有可能的圖像爲你的精靈。然後,您使用代碼將特定的大圖像塊分配給新圖像。然後你將這些圖像放在一個數組中。隨着播放器的移動,您可以增加數組索引,然後在達到最後時重置爲0。

如何選擇要顯示的圖像(索引)可以通過放置在地圖上(x或y位置),當前速度或其他屬性來定義。

您甚至可以根據玩家狀態更改您使用的圖像陣列。意思是,你可以有一組圖像用於行走,另一組用於跑步,另一組用於跳躍。您可以根據標誌或狀態對象確定哪個數組。

一般來說,對於良好的步行運動,您希望陣列中至少有6張圖像。

有關在pygame的精靈表的詳細信息,請查看他們的維基:https://pygame.org/wiki/Spritesheet

雪碧表的一個例子,看看Spriters資源:http://www.spriters-resource.com/