更新時(shí)間:2021年11月05日10時(shí)35分 來源:傳智教育 瀏覽次數(shù):
眾所周知,游戲啟動(dòng)后一般由玩家手動(dòng)關(guān)閉,但目前的程序在開啟圖形窗口并設(shè)做標(biāo)題后退出,這是因?yàn)槌绦蛞呀?jīng)執(zhí)行完畢。若要使游成保持運(yùn)行,需要在程序中添加一個(gè)無限循環(huán),循環(huán)代碼如下:
while True: pass
在pygame display.set camption(‘數(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,這說明循環(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所示。
添加控制語(yǔ)句后
猜你喜歡:什么是享元模式?享元模式實(shí)現(xiàn)俄羅斯方塊游戲
Python中的while循環(huán)語(yǔ)句怎么用?
北京校區(qū)