2009-04-10 108 views
3

經過一些代碼的調整,我從某人得到一個字符圖像的方向和上下左右輸入,我已經把它放在一起:(希望代碼不太雜亂)Pygame:雪碧動畫理論 - 需要反饋

Character Move Code + IMG

精靈片只運行長度,所以基本上每個精靈部分是不同的操作。現在有沒有辦法讓一個代碼與當前的代碼一起從一組「動作」中循環下來以製作動畫?

例如: 「運行左派」是精靈3.所以後來經過我們指定的列會是可能的循環下來怎麼過運行動畫的許多幀(可以說4)爲了使動畫?

示例圖片: alt text http://animania1.ca/ShowFriends/dev/example.jpghttp://animania1.ca/ShowFriends/dev/example.jpg

+0

這個問題很混亂。請閱讀文本並將其清除,以便我們瞭解您想要的內容。 – 2009-04-10 11:14:32

回答

4

它應該很容易。

如果您將幀編號記錄在一個變量中,則可以使用幀數來對其進行取模,以獲得要顯示的動畫幀編號。

frame_count = 0 
animation_frames = 4 
while quit == False: 
    # ... 
    # snip 
    # ... 
    area = pygame.Rect(
     image_number * 100, 
     (frame_count % animation_frames) * 150, 
     100, 
     150 
    ) 
    display.blit(sprite, sprite_pos, area) 
    pygame.display.flip() 
    frame_count += 1 

如果不同的動作具有不同數量的幀,則在更新image_number時必須更新animation_frames。

另外,這裏假定可以播放任何幀的動畫。如果不是這種情況下,你需要記錄幀數是什麼時,行動開始,和模數從之前幀計數借此遠:

area = pygame.Rect(
     image_number * 100, 
     ((frame_count - action_start_frame) % animation_frames) * 150, 
     100, 
     150 
    ) 

的注意事項你的事件處理。如果你按住左邊的按鈕並右擊,但保持按住左邊,則精靈將停止移動,因爲您處理的上一個事件是一個關鍵事件,儘管事實上我仍然處於左側。

如果這不是您想要的,您可以通過記錄您感興趣的按鍵的上/下狀態或使用接口來解決此問題。

另一方面,你似乎是要瞄準固定的幀速率,同時根據最後一幀所用的時間來確定移動精靈的距離。在我看來,這可能並不理想。

2D動作遊戲通常需要以可預測的方式工作。如果某些CPU繁重進程在計算機的後臺啓動並導致遊戲無法每秒刷出60幀,則可能最好減慢速度,而不要讓對象開始跳過幀之間的巨大距離。想象一下,如果這發生在像Metal Slug這樣的2D動作遊戲中,那麼你不得不四處避開子彈?

這也使得任何物理計算都簡單得多。你必須根據它是什麼類型的遊戲來進行判斷。

+0

非常感謝您的意見。我同意你所說的關於表演和什麼的一切。我從提供給我的免費代碼和建議中學習了所有這些內容。有什麼你可以指導我去學習那些能夠更好地滿足我需要的東西嗎? – RamonLion 2009-04-10 11:47:47