Python pygame 動畫游戲循環(huán)游戲時鐘實現(xiàn)原理
1. 游戲循環(huán)和游戲時鐘
之前幾篇文章中,飛機大戰(zhàn)游戲中的英雄飛機已經被繪制到屏幕上了,怎么能夠讓飛機移動呢?
1.1 游戲中的動畫實現(xiàn)原理
跟電影的原理類似,游戲中的動畫效果,本質上是快速的在屏幕上繪制圖像
電影是將多張靜止的電影膠片連接、快速的播放,產生連貫的視覺效果!
一般在電影上每秒繪制60次,就能夠達到非常連續(xù)高品質的動畫效果(相當于要每秒鐘調用60次update效果)
每次繪制的結果被稱為幀F(xiàn)rame(靜止畫面)
2. 游戲循環(huán)
游戲的兩個組成部分:
- 游戲的初始化:創(chuàng)建游戲窗口,繪制圖像初始位置,設置游戲時鐘
- 游戲循環(huán):設置刷新幀率,檢測用戶交互,更新所有圖像位置,更新屏幕顯示
游戲循環(huán)的開始就意味著游戲的正式開始
游戲循環(huán)的作用:
- 保證游戲不會直接退出
- 變化圖像位置--動畫效果
- 每隔1/60秒移動一下所有圖像位置
- 調用
pygame.display.update()更新屏幕顯示
- 檢測用戶交互--按鍵、鼠標等
3. 游戲時鐘
pygame專門提供了一個類pygame.time.Clock可以非常方便的設置屏幕繪制速度--刷新幀率
要使用時鐘對象需要兩步驟:
在游戲初始化創(chuàng)建一個時鐘對象
在游戲循環(huán)中讓時鐘對象調用tick(幀率)方法
tick方法會根據(jù)上次被調用的時間,自動設置游戲循環(huán)中的延時
案例演示:本案例將在游戲循環(huán)外部創(chuàng)建時鐘對象,在游戲循環(huán)內部創(chuàng)建tick方法,就可以來指定循環(huán)內部的代碼執(zhí)行的頻率。
具體代碼演示如下所示:游戲循環(huán)內部的代碼,每秒重復循環(huán)60次就可以,就在游戲初始化的時候,創(chuàng)建游戲時鐘對象。
然后,在游戲循環(huán)中,通過時鐘對象調用tick的方法,就可以輕松的指定,游戲循環(huán)內部的代碼每秒鐘執(zhí)行的次數(shù)。
import pygame
pygame.init()
# 創(chuàng)建游戲的窗口 640*642
screen = pygame.display.set_mode((640, 642))
# 繪制背景圖像
bg = pygame.image.load("./飛機大戰(zhàn)資料包/images/background1.jpg")
screen.blit(bg, (0, 0))
# 繪制英雄的飛機
hero = pygame.image.load("./飛機大戰(zhàn)資料包/images/me1.png")
screen.blit(hero, (300, 500))
# 可以在所有繪制工作完成之后,統(tǒng)一調用update方法
pygame.display.update()
# 創(chuàng)建時鐘對象
clock = pygame.time.Clock()
# 游戲循環(huán)->意味著游戲的正式開始
i = 0
while True:
# 希望無限循環(huán)內部的代碼每秒鐘重復循環(huán)60次
# 可以指定循環(huán)體內部的代碼執(zhí)行的頻率
clock.tick(60)
print(i)
i = i + 1
pass
pygame.quit()以上就是Python pygame 動畫游戲循環(huán)游戲時鐘實現(xiàn)原理的詳細內容,更多關于Python pygame 動畫的資料請關注腳本之家其它相關文章!
相關文章
解決Python獲取文件提示找不到指定路徑can‘t?open?file?'area.py':
這篇文章主要給大家介紹了關于如何解決Python獲取文件提示找不到指定路徑can‘t?open?file?'area.py':[Errno?2]?No?such?file?or?directory的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-11-11
Python BentoML構建部署和管理機器學習模型技巧掌握
BentoML是一個開源的Python框架,旨在簡化機器學習模型的打包、部署和管理,本文將深入介紹BentoML的功能和用法,提供詳細的示例代碼和解釋,幫助你更好地理解和應用這個強大的工具2024-01-01
Python基于smtplib實現(xiàn)異步發(fā)送郵件服務
這篇文章主要介紹了Python基于smtplib實現(xiàn)異步發(fā)送郵件服務,需要的朋友可以參考下2015-05-05

