它應該很容易。
如果您將幀編號記錄在一個變量中,則可以使用幀數來對其進行取模,以獲得要顯示的動畫幀編號。
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動作遊戲中,那麼你不得不四處避開子彈?
這也使得任何物理計算都簡單得多。你必須根據它是什麼類型的遊戲來進行判斷。
這個問題很混亂。請閱讀文本並將其清除,以便我們瞭解您想要的內容。 – 2009-04-10 11:14:32