<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          開(kāi)發(fā)游戲的核心原理

          共 1774字,需瀏覽 4分鐘

           ·

          2024-07-10 13:31

          你小時(shí)候有沒(méi)有玩過(guò)這樣一種玩具:一塊硬紙,一面畫(huà)著一只鳥(niǎo),一面畫(huà)著一個(gè)籠子。硬紙下粘上一根細(xì)棒。用手來(lái)回轉(zhuǎn)動(dòng)細(xì)棒,讓硬紙的兩面快速交替出現(xiàn),就會(huì)看見(jiàn)鳥(niǎo)被關(guān)在了籠子里。


          這種現(xiàn)象被稱(chēng)為視覺(jué)暫留,又稱(chēng)余暉效應(yīng)。人眼的性質(zhì)使得光信號(hào)在進(jìn)入之后,會(huì)保持一小段時(shí)間,這段時(shí)間大約是0.1~0.4秒。電影、動(dòng)畫(huà)便是利用這種現(xiàn)象得以實(shí)現(xiàn),把一幅幅靜態(tài)畫(huà)面快速連續(xù)播放,形成看上去連續(xù)的活動(dòng)畫(huà)面。游戲也不例外。


          來(lái)看一段用 Python 里的知名游戲庫(kù) pygame(需安裝)寫(xiě)的一個(gè)“空游戲”代碼:



          這段代碼雖然只顯示了一張背景圖片,完全沒(méi)有任何游戲功能,但這已經(jīng)是一個(gè)最基本的游戲代碼框架了。


          注意代碼中一個(gè) while True 的循環(huán),注釋為“游戲主循環(huán)”。這就是游戲的主體部分。每次循環(huán)都相當(dāng)于是一張靜態(tài)的畫(huà)面,程序一直運(yùn)行,只需要去修改這張畫(huà)面,就有了動(dòng)態(tài)的效果。

          與動(dòng)畫(huà)不同,游戲中不僅要把一幅幅畫(huà)面播放出來(lái),還需要處理玩家的操作與游戲中內(nèi)容的交互。所以在這個(gè) while 循環(huán)中,還要去接收玩家的輸入,以及處理游戲中的各種邏輯判斷、運(yùn)動(dòng)、碰撞等等。


          在以上代碼的主循環(huán)里,做了對(duì)退出事件的響應(yīng):

          for event in pygame.event.get():    if event.type == pygame.QUIT:        #接收到退出事件后退出程序        pygame.quit()        exit()


          然后把圖像繪制到窗口中:
          screen.blit(background, (0,0))


          最后,把整個(gè)窗口畫(huà)面更新:

          pygame.display.update()

          如果你看過(guò)“黏土動(dòng)畫(huà)”,那么就可以把整個(gè)游戲過(guò)程想象成拍攝黏土動(dòng)畫(huà)的過(guò)程:

          • 每一次,screen.blit() 相當(dāng)于去把人偶、布景移動(dòng)一點(diǎn)點(diǎn)位置

          • pygame.display.update() 則是按下快門(mén)拍下一幀新的畫(huà)面

          • if event.type == pygame.QUIT: 就是在判斷,導(dǎo)演是不是喊停收工了

          這一切都由計(jì)算機(jī)在很短的時(shí)間內(nèi)處理,以至于玩家感覺(jué)是連貫的。

          盡管這是非常簡(jiǎn)單的游戲邏輯,但在核心原理上,絕大多數(shù)的游戲都是相通的。即便是酷炫的3D游戲或者大型網(wǎng)游,它們同樣是通過(guò)一個(gè)游戲主循環(huán),在循環(huán)中更新各種游戲邏輯和顯示效果來(lái)運(yùn)作的。


          有些大型3D游戲需要在一次循環(huán)內(nèi)做很多事情,需要進(jìn)行復(fù)雜的物理運(yùn)算、計(jì)算光線的照射效果、處理大量電腦角色的智能、網(wǎng)絡(luò)信息通訊等。在配置不高的電腦上,這些計(jì)算花費(fèi)的時(shí)間就多,游戲刷新畫(huà)面的頻率就變慢了。這也就是我們常聽(tīng)說(shuō)“一個(gè)游戲的幀率低”的原因,這種時(shí)候你就會(huì)感到游戲不流暢。


          以上就是對(duì)于電子游戲核心原理的簡(jiǎn)單介紹。如果你是個(gè)對(duì)游戲開(kāi)發(fā)感興趣的新手,可以看看我之前寫(xiě)過(guò)的 pygame 系列教程:


          Pygame 入門(mén) - 仿微信打飛機(jī)游戲


          雖然不像現(xiàn)在流行的游戲引擎那么“傻瓜化”操作,但是通過(guò)代碼實(shí)現(xiàn)游戲可以讓你對(duì)游戲的底層邏輯有更深刻的理解。


          作者:Crossin的編程教室


          Crossin的新書(shū)《碼上行動(dòng):用ChatGPT學(xué)會(huì)Python編程》已經(jīng)上市了。本書(shū)以ChatGPT為輔助,系統(tǒng)全面地講解了如何掌握Python編程,適合Python零基礎(chǔ)入門(mén)的讀者學(xué)習(xí)。【點(diǎn)此查看詳細(xì)介紹】
          購(gòu)買(mǎi)后可加入讀者交流群,Crossin為你開(kāi)啟陪讀模式,解答你在閱讀本書(shū)時(shí)的一切疑問(wèn)。


          添加微信 crossin123 ,加入編程教室共同學(xué)習(xí)~

          感謝轉(zhuǎn)發(fā)點(diǎn)贊的各位~

          瀏覽 93
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本色情免费 | 色欲无码精品视频 | 在线免费观看一区 | 欧美肏屄视频在线观看 | 日日干视频免费 |