終于等到在網上買的書了,雖然這書時代有點老,但還是覺得還是有價值,應該好好讀一讀,仔細閱讀當然是要做些筆記啦。
學習前的準備工作:
這本書的例子用的是VC++ 6.0+DirectX 7.0,所以先得到網上下載DirectX 7.0
SDK(8.0亦可),解壓,把Include 和lib 下的文件全部拷貝到Vc
++的對應目錄下,然后,我就試著編譯了第一章的一個例子游戲---打磚塊的游戲,發現連接不了外部文件!無奈,百度一下,原來還得對編譯器做些工作:在Project/Settings /link Object/library 添加
ddraw.lib dxguid.lib 。
第一章 學海無涯
講解游戲誕生的整個過程,Windows下面的游戲運行整個過程和游戲編程中的規范。
“
一個簡化游戲的結構:第一步,初始化
第二步,進入游戲循環
第三步:獲得玩家的輸入信息
第四步:執行人工智能和游戲邏輯
第五步:渲染下一幀圖像
第六步:同步顯示
第七步:循環
第八步:關閉 ”
啊哈原來一個游戲程序簡單點就是這樣運行的,游戲也并不是那么神秘額。
另外的收獲就是游戲編程一些規范和技巧:
1.“你不應當在對運行時間或內存要求特別嚴格的代碼段中式用高層API。特別是與游戲內循環有關的代碼大多需要手工編寫,否則游戲多半會遇到嚴重的速度和性能的問題。當然,這并不一位著就不能信任DirectX等
API,因為DirectX的設計目的就是兼顧高性能和“thin”原則。但就通常來講,應當避免頻繁調用高層的函數。”----這點是有點不太明白,作者是對API的性能不太信任?還是另有原因,暫且放在這里,等整體看完再研究之。
2.“不要害怕使用全局變量。”“由于參數要被壓棧和出棧,執行這個函數體所需時間小于調用函數所需的時間,在這種情況下,更好的方法可以是設立一些全局變量,然后再調用前進行賦值以傳遞參數”——時間是如此的重要!
3.“使用內聯函數”--呵呵,這個上C++課時老師講啦。雖然使編譯后的程序變大了,但卻有效的提高運行速度。
4.“盡量使用32位的變量而不是8位或16位變量。”
“struct CPOINT
{
short x,y;
unsigned char c;
} //
end CPOINT”
“注意,定義這個結果看上去不錯,但實際并非如此!首先,結構本身是一個5字節長的結構——(2*sizeof(short)+sizeof(char))=5
字節。這太糟了額,由于沒注意字節對齊,內存尋址的時候會出大問題。”——這點確實不知道!標記之。
5.“以類似RISC的方式來編程。換句話來說,盡量簡化你的代碼,而不是是他更復雜。”——以前一直想,能一句完成,就不要寫多幾行,原來簡單句子,執行的更快。“使用二進制移位運算來進行乘數是2的冪的簡單整數乘法。”
6.“不要為簡單的對象定義太多復雜的數據結構。鏈表結構很好用,但并不意味著當你所需要的其實是大約有256個固定數組的時候,你也該使用鏈表”
7.最后有一個小游戲,但是我對里面的碰撞算法,不太理解啊,真是有點難度啊。