首頁(yè)技術(shù)文章正文

Python游戲模塊:游戲循環(huán)與游戲時(shí)鐘

更新時(shí)間:2021-11-04 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班


眾所周知,游戲啟動(dòng)后一般由玩家手動(dòng)關(guān)閉,但目前的程序在開啟圖形窗口并設(shè)做標(biāo)題后退出,這是因?yàn)槌绦蛞呀?jīng)執(zhí)行完畢。若要使游成保持運(yùn)行,需要在程序中添加一個(gè)無(wú)限循環(huán),循環(huán)代碼如下:

while True:
pass

在pygame display.set camption(‘?dāng)?shù)字推盤’)之后添加以上循環(huán)代碼,程序?qū)⒁恢北3诌\(yùn)行。
圖形化游戲的畫面通常是動(dòng)態(tài)的,游戲中如何實(shí)現(xiàn)動(dòng)畫效果呢?這其實(shí)是利用了“視覺暫留”現(xiàn)象。研究表明,人眼在觀察景物時(shí),光信號(hào)傳入大腦神經(jīng),需經(jīng)過一段短暫的時(shí)間,光的作用結(jié)束后,視覺形象并不立即消失,而是殘留在視網(wǎng)膜上。視覺的這一現(xiàn)象被稱為“視覺暫留”。電影實(shí)際上也應(yīng)用了這個(gè)原理一電 影膠片以每秒24格畫面勻速運(yùn)動(dòng),一系列靜態(tài)畫面就會(huì)因視覺暫留而造成一種連續(xù)的視覺印象,形成逼真的動(dòng)感。
一般情況下,計(jì)算機(jī)上一秒繪制60幀(Frame)便能夠達(dá)到非常連續(xù)、高品質(zhì)的動(dòng)畫效果。換言之,窗口中刷新圖像的頻率只要不低于每秒60幀,就能夠達(dá)到我們對(duì)動(dòng)畫效果的預(yù)期。修改循環(huán)代碼,在循環(huán)體中通過數(shù)值累加可直觀地觀察循環(huán)體的執(zhí)行頻率,修改后的循環(huán)代碼如下:

i = 0
while True:
Print(i)
i+=1

運(yùn)行修改后的程序,可觀察到命令行1秒后打印的數(shù)值遠(yuǎn)遠(yuǎn)超出了60,這說(shuō)明循環(huán)體的執(zhí)行頻率非常高。過高的頓率意味著超高的負(fù)荷,通過任務(wù)管理器觀察計(jì)算機(jī)性能,可注意到僅多運(yùn)行了這一個(gè)程序,計(jì)算機(jī)CPU的占用率便增加了約20%。為了解決頓率過高的問題,需在程序中設(shè)置游戲時(shí)鐘。pgeme的time模塊專門提供了一個(gè)Clok類,通過該類的tiol )方法可以方便地設(shè)置游戲循環(huán)的執(zhí)行頻率,具體操作如下:

FPSCLOCK - pygame.time.Clock() 
#創(chuàng)建Clock對(duì)象
FPSCLOCK.tick(FPS)
#為Clock對(duì)象設(shè)置幀率
修改程序7_pg_test.py中的代碼,為其添加幀率控制語(yǔ)句,修改后的程序如下:
...

FPS = 60                                         #預(yù)設(shè)頻率
def main():
pygame.init()                                    #初始化所有模塊
FPSCLOCK = pygame.time.Clock()                   #創(chuàng)建Clock對(duì)象
i=0
while True:
1 = i + 1
print(i)
FPSCLOCK.tick(FPS)                               #控制幀率
pygame.display.update ()
Pygame.quit()                                    #卸載所有模塊
if_ name_==_main_':
main()

經(jīng)過如上修改后,程序中while循環(huán)內(nèi)的代碼由高頻執(zhí)行轉(zhuǎn)變?yōu)?秒執(zhí)行FPS(60)次。
執(zhí)行以上程序,通過任務(wù)管理器對(duì)比增加幀率控制語(yǔ)句前后CPU的占用情況,可發(fā)現(xiàn)CPU的使用率大大降低,如圖7-3所示。

1635996537067_添加幀率控制語(yǔ)句.jpg

添加控制語(yǔ)句后





猜你喜歡:

while循環(huán)嵌套和for循環(huán)嵌套語(yǔ)法格式介紹【Python學(xué)習(xí)教程】

為什么要使用foreach循環(huán)?它有哪些優(yōu)點(diǎn)和局限性?

python中的for循環(huán)詳細(xì)介紹【代碼演示】

循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是什么?可以做什么?

黑馬程序員Python+大數(shù)據(jù)開發(fā)開發(fā)培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!