為了更好的了解dx和遊戲的架構,同時也為了練習code reading的能力(好官僚的口氣),我打算把dx sdk中的demo——donuts4(麵包圈大戰)仔細的讀一遍。以前也沒讀過什麼長的東西,還一直以為寫東西才是根本。現在看來,讀東西同樣的重要。
檔案構成
除了resource.h外,donuts4共有18個cpp/h檔案。根據標頭檔案裡面的注釋,首先對這些檔案有乙個大概的了解:
donuts.cpp/.h 是donuts4的主檔案了。裡面說,該遊戲使用了direct3d,directmusic,directsound和directinput。
stdafx.cpp/.h 預編譯標頭檔案。
gamemenu.cpp/.h 用於顯示遊戲的選單。(我怎麼沒看見遊戲裡面有選單?!)
profile.cpp/.h 用於讀寫ini檔案。
filewatch.cpp/.h 用於檢視一些檔案是否被修改了。(無法理解這個的作用……)
notifytool.cpp/.h 似乎是乙個idirectmusictool的擴充套件。
3dmodel.cpp/.h 乙個類c3dmodel的實現。應該是對3d模型的抽象吧。
displayobject.cpp/.h 類cdisplayobject的實現。
3ddisplayobject.cpp/.h 乙個繼承於cdisplayobject的類。不知道和c3dmodel有什麼聯絡。
3ddrawmanager.cpp/.h 這個應該是用來畫東東的manager了。
inputmanager.cpp/.h 管理input的類。
heightmap.cpp/.h 類cheightmap的實現,應該是和terrain相關的。
terrainmesh.cpp/.h 似乎是terrain裡面的mesh的抽象。
terrainengine.cpp/.h 地形引擎。
particlesystem.cpp/.h 粒子系統(也沒看見哪用了……)。
bullet.cpp/.h 子彈嘛,就是麵包圈了……
enemyship.cpp/.h 敵人,就是那個紫色的東西。
playership.cpp/.h 自己的船,不過似乎不可見的樣子(因為是第一視角)。
donuts.h中的類
donuts只使用了***mon中的d3dfile,d3dfont以及一些util。
另外,donuts.h還對一些custom vertex和相應的fvf做了宣告。
程式的入口
donuts.cpp有96k這麼大,2000多行,看著就頭痛。
create()和run()都不長,可以仔細看看。
create()照例是宣告乙個視窗,然後把相應的屬性存了下來。值得注意的是,在create()中呼叫了o***imesceneinit(),就是說,遊戲物件的初始化也是在create()中完成的。
run()中也是在意料之中的封裝了乙個message pump。有個有趣的地方,在取訊息的時候,donuts採用的方法是:
if(active)
msg = peekmessage();
else
msg = getmessage();
旁邊還寫上了簡單的說明:如果程式是active的話,就用peek,這樣可以用idle的時間來做render。如果不是的話,就用get,這樣可是避免eat掉cpu的時間。又學了一招。
如果沒有msg在wait的話,就可以render了。render的**很怪異:
if( m_bdisplayready )
else
}也就是說,如果檔案發生改變了的話,就要重新更新檔案。它這裡所說的檔案應該就是ini檔案了。不過…… 誰在玩遊戲的時候會切出去更改配置檔案?又或者遊戲本身更改了配置檔案(沒見到option阿)?迷惑ing……
不過可以看出,渲染分為兩步updatescene()和renderscene()。
UE 4 學習筆記 1
ue4 unreal engine 4 虛擬 虛幻 引擎 4 遊戲開發是一項高度複雜的 開發工作。基本知識內容 但是是否需要學完這麼多知識才能開發遊戲?顯然,這樣學習遊戲開發入門成本太高。於是,前人將基礎知識的複雜 進行了封裝 使得入門的遊戲開發者可以重點關心遊戲邏輯和功能方面的 無需接觸最底層的知...
JUnit4學習筆記1
在計算機程式設計中,單元測試 又稱為模組測試,unit testing 是針對程式模組 軟體設計的最小單位 來進行正確性檢驗的測試工作。程式單元是應用的最小可測試部件。對於物件導向程式設計,最小單元就是方法,包括基類 超類 抽象類 或者派生類 子類 中的方法。執行單元測試,是為了證明某段 的行為確實...
UE4 Vive 學習筆記1
16.9.10 為了做房產專案,這兩天開始學習unreal engine 4。之前一直用unity,但是視覺效果一直不滿意,聽說虛幻4的效果更好,就來試一試水。1.安裝ue4 2.新建vr工程專案 學習前期主要靠軟體自帶的教程和官方文件,這些資料都有中文的,效率提高了很多。但是學到藍圖部分就要把語言...