C++遊戲程式設計(一開篇)
轉自:http://blog.csdn.net/zh634455283/article/details/8251253
作者:毛星雲 郵箱: happylifemxy@qq.com 大家別叫我樓主可以嗎- -.請叫我淺墨
在從第一節開始看這個筆記系列的話,大家會發現,一上來就開始講DirectX相關的內容,但是寫了幾節之後,又開始講
GDI了。
這是因為我寫完前幾節後,發覺直接講DirectX有些生硬。最後我想了一下,應該先梳理完GDI相關的重點知識,再來講
DirectX,畢竟遊戲程式設計裡面windows API是基礎。所以先講windows API,接著介紹DirectX,最後講解遊戲引擎的設
計,這樣會自然得多。
————淺墨於2012年3月26日注
很多朋友在評論中都談到了GDI的效率問題。關於GDI,我想在這一系列文章的篇首簡單的說明一下。
用GDI做遊戲的效率很低,非常的不推薦。但是GDI作為windows與生俱來的渲染引擎,在圖形方面是一個全能的存在。
學習遊戲程式設計如果想打好一個堅實的基礎,掌握GDI是非常有必要的,全能的GDI可以在DirectX尚未做好準備的時候,以一個
強大後援的姿態,在遊戲的測試與模擬過程中給予我們莫大的幫助。
————淺墨於2012年4月26日注
很多朋友也談到遊戲開發中是否運用MFC的困惑,我也在這裡簡單的說明一下。由於MFC有底層程式碼的隱蔽性等特點,且MF
C畢竟封裝了很多實際上沒用到的東西,不利於遊戲開發的效率和遊戲的執行速度,不適合做遊戲開發。MFC做遊戲地圖編輯
器之類的工具軟體倒是比較適合。我覺得一款成功的遊戲最基本的特點就是具有流暢的使用者體驗,這個要求達不到的話,其他
方面就不用考慮了。
————淺墨於2012年4月27日注
在淺墨沒更新文章的這三個月裡,數百位需要遊戲程式設計相關資料的朋友在部落格裡留了郵箱,沒有及時給大家發到郵箱裡淺墨表示非常抱歉。在這裡,淺墨最終還是決定把這些資料打包上傳到CSDN下載頻道,這樣大家就可以直接下載,省去了淺墨發郵件的功夫,雖然淺墨一直認為這樣更親切更真誠。當然,0資源分下載是必須的。
以後大家想要這些資料,就不用再留郵箱了,直接點連結去下載就好了。
下面是這些資料的一個清單(零程式設計基礎開始):
1.《C++ primer中文版》
2.《Windows程式設計第五版》
3.《VC++深入詳解》
4.《Windows核心程式設計》
5.《Effective STL中文版》
6.《Windows遊戲程式設計大師技巧》
7.《DIRECTX.9.0.3D遊戲開發程式設計基礎》
這個書單是從零程式設計基礎開始的,其中部分書中涉及到了DirectDraw與Direct3D 8,這兩個API在新版本DirectX SDK中都被移除了,現在基本上無用武之地,所以涉及到DirectDraw與Direct3D 8的那部分就不用仔細看了哈。
本來還有《VC++深入詳解》的高清影印版,以及《遊戲程式設計精粹》系列的7本書,以及幾本C++系列的經典之作,但是它們塊頭比較大,淺墨目前這個號在CSDN下載頻道只有110Mb的上傳限權,傳起來比較麻煩。暫時就不傳了。
下面給出遊戲開發學習資料的下載連結:
請點選這裡下載:零基礎遊戲程式設計學習資料by淺墨
(免責宣告:淺墨在這裡只是進行了電子版的收集工作,如果大家覺得這些書還不錯,建議去買紙質版,畢竟這樣對眼睛的健康有好處,健康是金錢買不來的)
————淺墨於2012年11月07日
關於學完DirectX,我們該幹什麼。
淺墨覺得,歷代DirectX龍書的作者Frank Luna在龍書忽視了非常重要的一方面內容的講解,那就是就是學完了DirectX我們接著該做什麼。
這大概是很多懷揣遊戲開發夢想的熱血青年們曾經思考過的問題。
淺墨也曾經在這問題上迷茫過,也因為沒人指明前路而走了不少彎路。
不過後來在黑暗中不斷地摸索,將荊棘變成坦途之後,終於摸索出了一條正確的道路。
也就是看完龍書《DIRECTX.9.0.3D遊戲開發程式設計基礎》之後,我們需要如何學習,來把學到的知識立體化,最終轉化為開發遊戲的實際能力。首先我們需要再看一本書,《Real-Time Rendering》,也就是(RTR)實時渲染技術,目前出到第三版了。(這本書並沒有中文版,大家如果要走遊戲開發的道路,讀完龍書之後,剩下基本上都要靠讀英文書了。)
學完龍書,也可以選擇自己喜歡的遊戲引擎來接觸並掌握了。看完龍書後淺墨首推學習Irrlight,然後進階推薦Orge。兩者都是開源遊戲引擎,都有著原始碼提供下載學習,而且網上對這兩種引擎的研究熱情很高,資料豐富,引擎程式碼字裡行間都是哲思,掌握其中的程式碼並納為己用,自己寫出像樣的遊戲demo來是不成任何問題的。
————淺墨於2012年12月02日
作為visual C++,DirectX入門的第一講,概念性東西比較多,這裡我們只是簡單的整理一下知識框架,給大家一個大概的認知體系,
後續文章中,我們會展開進行深入的講解。
1.DirectX的定義
首先,我們必須瞭解DirectX的定義。DirectX,(Direct eXtension,簡稱DX)是由微軟公司建立的多媒體程式設計介面。由C++程式語言實現,遵循COM。被廣泛使用於Microsoft Windows、Microsoft Xbox和Microsoft Xbox 360電子遊戲開發,並且只能支援這些平臺。最新版本為DirectX 11,建立在最新的Windows 7上。Microsoft DirectX 是這樣一組技術:它們旨在使基於Windows 的計算機成為執行和顯示具有豐富多媒體元素(例如全色圖形、視訊、3D 動畫和豐富音訊)的應用程式的理想平臺。DirectX 包括安全和效能更新程式,以及許多涵蓋所有技術的新功能。應用程式可以通過使用DirectX API 來訪問這些新功能。
2.必要的工具和開發環境
要進行遊戲的開發,我們必須擁有一套最新的DirectX SDK(軟體開發包)。我們可以從微軟的官方下載站進行下載然後安裝,這裡貼出地址,http://msdn.microsoft.com/zh-cn/directx/aa937788.aspx。當然我們還要擁有開發環境,我們選擇Microsoft公司的Visual Studio 2010。
3.引擎設計概述
遊戲引擎是一系列高階程式碼,我們可以以它為基礎開發自己的遊戲。現代的遊戲引擎已經對使用他的人隱藏了底層實現的細節和規範。例如,可以在OpenGL和Direct3D的基礎上開發渲染引擎,這樣,引擎使用者就不需要知道使用的是哪一個渲染引擎,儘管也用到了一些底層的東西。
遊戲引擎包括:渲染引擎,物理引擎,聲音引擎等。遊戲引擎本身只是一個由更小的引擎組成的集合。遊戲引擎或它涵蓋的內容並沒有一個精確的定義。
對於視訊遊戲而言,它的遊戲引擎至少要包含渲染引擎和輸入引擎,這是必須的,否則,就不能稱其為互動式遊戲。
遊戲程式設計師和遊戲引擎程式設計師完成的是兩種不同的工作。遊戲程式設計師只與開發遊戲的遊戲引擎打交道,而遊戲引擎程式設計師要開發出其他人用於開發遊戲的引擎。
4.遊戲引擎中的幾個關鍵系統
遊戲引擎中的幾個關鍵系統有:遊戲渲染系統,輸入系統,聲音系統,物理系統,動畫系統,人工智慧(AI)系統等。
5. DirectX API函式
DirectX的API主要由DirectGraphics,DirectInput,DirectPlay,DirectMusic,DirectSound組成。每個API之間相互獨立,負責完成DirectX核心中不同的功能。DirectX中每個API都可以通過硬體加速,這意味著這些API可以直接和執行軟體的底層硬體對話。下面是各種API函式的概要解釋。
DirectGraphics:
DirectGraphics為負責向螢幕渲染二維圖形和三維圖形的DirectX API,也就是眾所周知的Direct3D。
DirectInput:
DirectInput是可以直接使用所有與計算機關聯的輸入裝置的DirectX API。這些裝置包括鍵盤,滑鼠和遊戲控制器裝置。
DirectPlay:
DirectPlay是控制Direct中網路功能的Direct API。DirectPlay可以讓應用程式對機器進行網路功能設定,從而可以通過和其他網路玩家交流。
DirectMusic:
DirectMusic是負責普通聲音處理的DirectX API。
DirectSound:
DirectSound是負責高階聲音處理的DirectX API。
6.動手寫一個視窗
在Windows中使用Direct3D建立Win32視窗非常簡單。要建立一個Win32視窗就必須擁有一個WinMain()函式(這不是廢話是什麼)。我們可以在MSDN中查到WinMain()的標準句法
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);
當程式第一次執行時,WinMain()函式中的所有引數從系統獲取自己的相應引數值。通過在WinMain函式內部建立一個型別為WNDCLASSSEX的視窗類物件,建立視窗,然後顯示視窗,然後進行訊息迴圈,就可以實現一個空視窗的顯示。具體實現程式碼如下:
下面是上面講的框架程式碼,也是後面的筆記二的基礎,需要結合筆記二一起看。
- LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch(msg)
- {
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- break;
- }
- return DefWindowProc(hWnd, msg, wParam, lParam);
- }
- int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show)
- {
- WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
- hInst, NULL, NULL, NULL, NULL,
- "AppClass", NULL };
- RegisterClassEx(&wc);
- // Create the application's window
- HWND hWnd = CreateWindow(WINDOW_CLASS, WINDOW_NAME,
- WS_OVERLAPPEDWINDOW,
- 100, 100, 640, 480, NULL, NULL,
- hInst ,NULL);
- ShowWindow(hWnd, SW_SHOWDEFAULT);
- UpdateWindow(hWnd);
- // Enter the message loop
- MSG msg;
- ZeroMemory(&msg, sizeof(msg));
- while(msg.message != WM_QUIT)
- {
- if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- else
- {
- //Do something to the screen
- }
- }
- // Unregister our window.
- UnregisterClass("AppClass", wc.hInstance);
- }
第四階段,開始學習專門介紹遊戲開發的教程(有DirectX和OpenGL兩條路可選,這裡我們選擇DirectX,DirectX在國內為主流。具體比較請移步最近剛寫的這篇文章 【Visual C++】遊戲開發筆記十九 DirectX與OpenGL的博弈),推薦書籍為《DirectX 9.0 3D遊戲開發程式設計基礎》(封面為一個紅龍的),《Windows遊戲程式設計大師技巧》,《Direct3D遊戲開發技術詳解》等等,當然這類教程就比較多了,新出的有很多,DirectX相關的層出不窮,也可以選擇剛發行不久的新書,畢竟上面講的知識比較前沿與更具成熟性。(依然感謝liusofttech 的指出,為什麼我沒有推薦專門講解3D程式設計數學基礎的教程。我沒有專門指出來,是因為幾乎每一本Direct3D教材裡面都有一章到幾章有關必備數學基礎知識的講解。我覺得單獨來學數學基礎沒必要,費時且費力,我們只要在Direct3D教材裡掌握相關的數學知識,那就足夠了。)
以上就是本節筆記的全部內容。
更精彩的內容,且看後面的筆記系列。
感謝一直支援【Visual C++】遊戲開發筆記系列專欄的朋友們,也懇請大家繼續關注我的專欄。
【Visual C++】遊戲開發 系列文章才剛剛展開一點而已,因為遊戲世界實在是太博大精深了~
但我們不能著急,得慢慢打好基礎。做學問最忌好高騖遠,不是嗎?
淺墨希望看到大家的留言,希望與大家共同交流,希望得到睿智的評論(即使是批評)。
你們的支援是我寫下去的動力~
精通遊戲開發的路還很長很長,非常希望能和大家一起交流,共同學習,共同進步。
大家看過後覺得值得一看的話,可以頂一下這篇文章,你們的支援是我繼續寫下去的動力~
如果文章中有什麼疏漏的地方,也請大家指正。也希望可以多留言來和我探討相關的問題。
最後,謝謝你們一直的支援~~~
The end
相關文章
- C++ STL與泛型程式設計-第一篇 (Boolan)C++泛型程式設計
- 物件導向程式設計(C++篇4)——RAII物件程式設計C++AI
- 物件導向程式設計(C++篇3)——析構物件程式設計C++
- 物件導向程式設計(C++篇2)——構造物件程式設計C++
- C++程式設計C++程式設計
- C++實用程式設計——坦克大戰小遊戲C++程式設計遊戲
- WDM驅動程式設計之設計開發篇 (轉)程式設計
- 如何根據自己的需要培養遊戲開發技能?又一篇遊戲程式設計入門指南遊戲開發程式設計
- UE4中C++程式設計(一)C++程式設計
- windows 程式設計第一篇Windows程式設計
- 《通過遊戲程式設計實戰教新手學C++程式設計》學習筆記遊戲程式設計C++筆記
- C++原始碼遊戲程式設計---WinMain()函式集(轉)C++原始碼遊戲程式設計AI函式
- 《C++程式設計教程》C++程式設計
- C++核心程式設計C++程式設計
- [C++]C++程式設計例項C++程式設計
- C++程式設計思想筆記之一 (轉)C++程式設計筆記
- 設計模式——開篇設計模式
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 一、配置DirectX SDK (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 三、DirectDraw的要素(一) (轉)遊戲程式設計
- 名企面試官精講典型程式設計題之C++篇面試程式設計C++
- C++程式設計開發和指標的關係C++程式設計指標
- 開始自學ue5的c++程式設計C++程式設計
- 最早做遊戲設計與開發的女程式設計師遊戲設計程式設計師
- [.net 物件導向程式設計深入](0) 開篇物件程式設計
- C++程式設計實現C++程式設計
- C++ 提高程式設計C++程式設計
- C++提高程式設計C++程式設計
- C++程式設計模板2C++程式設計
- C++模板超程式設計C++程式設計
- <<從0到1學C++>> 第2篇 認識C++程式導向程式設計的特點C++程式設計
- c++ 模板超程式設計的一點體會C++程式設計
- 【程式設計師的遊戲開發之路】 遊戲架構程式設計師遊戲開發架構
- 純C++遊戲程式設計: Tic-Tac-Toe(三連棋遊戲)的實現C++遊戲程式設計
- TGDC | 一個遊戲程式設計師的堅持 —— 論向量化程式設計遊戲程式設計師
- C++程式設計從零開始之語句(轉)C++程式設計
- Delphi之快速設計(程式設計篇) (轉)程式設計
- [.net 物件導向程式設計基礎] (1) 開篇物件程式設計
- [.net 物件導向程式設計進階] (1) 開篇物件程式設計