電子游戲的核心原理
零基礎python入門教程:python666.cn
大家好,歡迎來到 Crossin的編程教室 !
你小時候有沒有玩過這樣一種玩具:一塊硬紙,一面畫著一只鳥,一面畫著一個籠子。硬紙下粘上一根細棒。用手來回轉(zhuǎn)動細棒,讓硬紙的兩面快速交替出現(xiàn),就會看見鳥被關在了籠子里。

這種現(xiàn)象被稱為視覺暫留,又稱余暉效應。人眼的性質(zhì)使得光信號在進入之后,會保持一小段時間,這段時間大約是0.1~0.4秒。電影、動畫便是利用這種現(xiàn)象得以實現(xiàn),把一幅幅靜態(tài)畫面快速連續(xù)播放,形成看上去連續(xù)的活動畫面。游戲也不例外。
來看一段用 Python 里的知名游戲庫 pygame(需安裝)寫的一個“空游戲”代碼:

這段代碼雖然只顯示了一張背景圖片,完全沒有任何游戲功能,但這已經(jīng)是一個最基本的游戲代碼框架了。
注意代碼中一個 while True 的循環(huán),注釋為“游戲主循環(huán)”。這就是游戲的主體部分。每次循環(huán)都相當于是一張靜態(tài)的畫面,程序一直運行,只需要去修改這張畫面,就有了動態(tài)的效果。
與動畫不同,游戲中不僅要把一幅幅畫面播放出來,還需要處理玩家的操作與游戲中內(nèi)容的交互。所以在這個 while 循環(huán)中,還要去接收玩家的輸入,以及處理游戲中的各種邏輯判斷、運動、碰撞等等。
在以上代碼的主循環(huán)里,做了對退出事件的響應:
for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()
screen.blit(background, (0,0))最后,把整個窗口畫面更新:
pygame.display.update()如果你看過“黏土動畫”,那么就可以把整個游戲過程想象成拍攝黏土動畫的過程:
每一次,screen.blit() 相當于去把人偶、布景移動一點點位置
pygame.display.update() 則是按下快門拍下一幀新的畫面
而 if event.type == pygame.QUIT: 就是在判斷,導演是不是喊停收工了
這一切都由計算機在很短的時間內(nèi)處理,以至于玩家感覺是連貫的。
盡管這是非常簡單的游戲邏輯,但在核心原理上,絕大多數(shù)的游戲都是相通的。即便是酷炫的3D游戲或者大型網(wǎng)游,它們同樣是通過一個游戲主循環(huán),在循環(huán)中更新各種游戲邏輯和顯示效果來運作的。
有些大型3D游戲需要在一次循環(huán)內(nèi)做很多事情,需要進行復雜的物理運算、計算光線的照射效果、處理大量電腦角色的智能、網(wǎng)絡信息通訊等。在配置不高的電腦上,這些計算花費的時間就多,游戲刷新畫面的頻率就變慢了。這也就是我們常聽說“一個游戲的幀率低”的原因,這種時候你就會感到游戲不流暢。
以上就是對于電子游戲核心原理的簡單介紹。如果你是個對游戲開發(fā)感興趣的新手,可以看看我之前寫過的 pygame 系列教程:
雖然不像現(xiàn)在流行的游戲引擎那么“傻瓜化”操作,但是通過代碼實現(xiàn)游戲可以讓你對游戲的底層邏輯有更深刻的理解。
_往期文章推薦_
