天天看點

《WINDOWS遊戲程式設計大師技巧》學習筆記1

終于等到在網上買的書了,雖然這書時代有點老,但還是覺得還是有價值,應該好好讀一讀,仔細閱讀當然是要做些筆記啦。

學習前的準備工作:

    這本書的例子用的是VC++ 6.0+DirectX 7.0,是以先得到網上下載下傳DirectX 7.0 SDK,解壓,把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.最後有一個小遊戲,但是我對裡面的碰撞算法,不太了解啊,真是有點難度啊。

繼續閱讀