?? 游戲開發中心----游戲實驗室 - 博客園.htm
字號:
<BR> case WM_SETCURSOR:
<BR>
SetCursor(NULL); </FONT><FONT face=宋體
color=#808080>// 設定鼠標為不顯示 </FONT><FONT face=宋體
color=#99ccff><BR> return TRUE;
<BR> case WM_KEYDOWN:
<BR> switch(wParam)
<BR>
{<BR> case
VK_ESCAPE: </FONT><FONT face=宋體
color=#808080> // 處理按下 ESC 鍵的反應 </FONT><FONT face=宋體
color=#99ccff><BR>
PostMessage(hWnd, WM_CLOSE, 0, 0); </FONT><FONT face=宋體
color=#808080>// 發送一個關閉窗口的命令 </FONT><FONT face=宋體
color=#99ccff><BR>
break; <BR>
}<BR> break;
<BR> case
WM_DESTROY: </FONT><FONT
face=宋體 color=#808080>// 在窗口即將銷毀時的反應 </FONT><FONT face=宋體
color=#99ccff><BR>
PostQuitMessage(0); </FONT><FONT face=宋體 color=#808080>//
發送一個結束的消息,必須的! </FONT><FONT face=宋體
color=#99ccff><BR>
break;<BR> } <BR> return
DefWindowProc(hWnd, message, wParam, lParam); </FONT><FONT face=宋體
color=#808080>// 一些沒有像上面一樣具體定義的消息的處理 </FONT><FONT face=宋體
color=#99ccff><BR>} </FONT><FONT face=Arial><BR><BR> 這個函數就是用來處理 Windows
的消息的,是一個標準程序必要的。
<BR><BR> 再來最后一個重要的函數。不好意思哦,實在是不想這么寫,但是想想,在這個函數結束后,你就可以實現一個具體的窗口了哦:)
<BR><BR></FONT><FONT face=宋體 color=#99ccff>int PASCAL WinMain(HINSTANCE
hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)<BR>{
<BR> MSG msg; </FONT><FONT face=宋體 color=#808080>//
定義一個消息的對象 </FONT><FONT face=宋體 color=#99ccff><BR><BR>
if(!Init(hInst, nCmdShow)) return
FALSE;
</FONT><FONT face=宋體 color=#808080>// 還記得上面的那個函數嗎?</FONT><FONT face=宋體
color=#99ccff> <BR><BR> while(1) </FONT><FONT face=宋體
color=#808080>// 程序的循環 </FONT><FONT face=宋體
color=#99ccff><BR> {
<BR> if(PeekMessage(&msg,
NULL, 0, 0, PM_NOREMOVE)) </FONT><FONT face=宋體 color=#808080>// 不要特別注意的
</FONT><FONT face=宋體
color=#99ccff><BR> {
<BR>
if(!GetMessage(&msg, NULL, 0, 0 ))
<BR>
return msg.wParam;
<BR>
TranslateMessage(&msg);
<BR>
DispatchMessage(&msg); <BR>
} <BR> else
if(bActive) </FONT><FONT face=宋體 color=#808080>//
就是上面的“程序是否激活”的變量判斷 </FONT><FONT face=宋體
color=#99ccff><BR> {
<BR>
ShowThePic(); </FONT><FONT face=宋體 color=#808080>//
顯示人物圖片的函數,上節的內容,就是整合在這兒的! </FONT><FONT face=宋體
color=#99ccff><BR> }
<BR> else WaitMessage();
</FONT><FONT face=宋體 color=#808080>// 沒有消息時,就等消息:) </FONT><FONT face=宋體
color=#99ccff><BR> } <BR>} </FONT><FONT
face=宋體><BR></FONT><FONT
face=Arial><BR> 其實到這兒,一個簡單的程序已經可以出爐了:)編譯,運行,你將看到一個黑色的窗口。這個窗口不同于一般的窗口,它沒有平常的標題欄,這個才是適合我們游戲的。我在這兒給出完整的代碼,但是,無法將上節的內容以程序的形式表現出來,因為涉及到了
DirectDraw 。我不想過多在教程中涉及未講的知識,因為那樣會影響對現有知識的理解。 <BR><BR> 下章教程,我將開始介紹
DirectDraw 了,以便能盡快將顯示的內容整合,同時我會保持教程和代碼的詳盡。
<BR><BR>注:<BR> 本范例在以下環境中通過:VC6.0、DirectX 7.0/8.1 SDK、Win2000/WinXP
<BR><BR>附件:<BR> 說明 [<A
href="http://dev.gameres.com/Program/Abstract/Thinking/gpBase_sample1.zip">本篇的代碼下載</A>]<BR></FONT></FONT><FONT
face=Arial><FONT face=Arial><FONT face=Arial
size=2><BR><BR></FONT></FONT><B><A name="四、游戲制作利器: 引擎 的選擇">四、游戲制作利器: 引擎
的選擇</A></B><FONT
size=2><BR><BR> 真的很高興能夠繼續我們的教程。大家也一定等了許久了,怪我太懶。<BR><BR> 上次,我們講到了窗口的建立,并且附帶了源代碼,不知道大家有沒有編譯和運行。不是當老師的嘮叨哦,大家一定要試試的,因為電腦這個東西,尤其是編程,要不斷地實踐才能掌握的。<BR><BR> 今天,我們來點輕松的,不涉及代碼,我們來一次“紙上談兵”。我今天是要大家選擇適合自己的游戲引擎。曾經有很多網友問我:“引擎
”到底是什么東西?我也回答過許多遍了,但是,我從沒有嫌煩過,因為我也是這么過來的。之所以取名叫“引擎”,他就像汽車之類的 Automobile
一樣,得有一個家伙驅使他工作。而游戲引擎呢,他就負責接受用戶輸入,交付自己的內部工作機構,處理,并最終以聲音、圖像等形式表現出來。<BR><BR> 現在大家在網絡上可以看到、并且下載到許多免費的游戲引擎,其中有2D的,也有時下流行的3D。國內有許多網站也在制作各自的引擎,有個別的的確有很高的效率,而且使用很方便,比如
云風 的 “風魂游戲開發庫”。這些引擎都是將我們今后會碰到的 DirectDraw、DirectInput、DirectPlay 等等
DirectX
部件整合,封裝,使其便于使用。像我其實自己也在使用別人的引擎來開發自己的游戲制作庫,那么,你該選擇怎么樣的引擎呢?我覺得這個完全取決于你對游戲開發的耐心及專研。<BR><BR> 現在,DirectX
已經發展到了 9.0 ,而且,在 8.1 的開發庫中,我們很高興的看到,微軟也已經封裝了以前繁瑣的步驟,因此,DirectX 8.1b
的開發庫,不失為一個比較好的基層函數庫。為什么說他還只是一個基層的呢?因為他還沒有像著名的 CDX 那樣有比較高級的效果封裝在里頭。CDX
是我比較喜歡的封裝庫,他不僅使用簡便,而且可以實現使用頻率比較高的功能,比如 Alpha
混合,雖然他不像其他的引擎來得功能強大,但是,他用于自己的研究和擴充是很好的,通過使用 CDX ,你對 DirectX
可以有個比較理性的認識。<BR><BR> 到這兒,大家應該發現了,我們以前公布的教程目錄和今天的對不上號,因為我發現現在其實有好多網站都有關于
DirectDraw 編程的輔導,而且,資源豐富。我相信,大家通過好好的分析這些代碼,然后,大量的實踐,就會打造你比較堅固的 DirectDraw
編程的基礎了。<BR><BR> 我們今后的教程往哪個方向走,我正在考慮,我也很想看到大家的好建議,作為一個游戲編程入門者,你最想看到怎么樣的文章?哪怕是一個不明白的地方,都可以提出來,我可以做專題來給大家講解一下。DirectDraw
方面的,專題在近期是不會出現了,還請大家見諒!<BR><BR> 最后,告訴大家一個可能算是比較好的消息,我們的教程游戲,還在更新和完善之中哦...<BR><BR><BR>待續……</FONT></FONT></P></TD></TR></TBODY></TABLE></DIV>
<DIV class=postFoot>posted @ <A title=permalink
href="http://www.cnblogs.com/3vgame/archive/2006/04/10/371780.html">2006-04-10
23:47</A> 3vgame 閱讀(1545) | <A title="comments, pingbacks, trackbacks"
href="http://www.cnblogs.com/3vgame/archive/2006/04/10/371780.html#FeedBack">評論
(9)</A> | <A
href="http://www.cnblogs.com/3vgame/admin/EditPosts.aspx?postid=371780">編輯</A>
</DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A
id=homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl02_TitleUrl
href="http://www.cnblogs.com/3vgame/archive/2006/04/10/371779.html">角色扮演游戲引擎的設計原理
</A></DIV>
<DIV class=postText>角色扮演游戲引擎的設計原理<B><SPAN> </SPAN></B>
<P><SPAN><SPAN><B>
</B><B>鄭州</B></SPAN><B> <SPAN>趙旺</SPAN></B></SPAN><B><SPAN> </SPAN></B></P>
<P><SPAN>角色扮演游戲</SPAN><SPAN>(RPG)</SPAN><SPAN>是深受廣大游戲迷們喜愛的一種游戲</SPAN><SPAN>,</SPAN><SPAN>
</SPAN><SPAN>它以獨特的</SPAN><SPAN>互動性</SPAN><SPAN>和故事性吸引了無數的玩家。它</SPAN><SPAN>向人們提供了超出現實生活的廣闊的虛擬世界,使人們能夠嘗試扮演不同的角色,去經歷和體驗各種不同的人生旅程或奇幻經歷。這些體驗都是在現實生活中無法實現的。在玩過許多游戲后,許多玩家都不再僅僅滿足于一個游戲玩家的身份,而會思考游戲是如何制作的,并且打算制作一個自己的游戲,網上的各種游戲制作小組更是如雨后春筍般涌現。下面我就給大家介紹一下角色扮演游戲引擎的原理與制作,希望能對游戲制作愛好者有所幫助。</SPAN></P>
<P><SPAN>一</SPAN> <SPAN>游戲引擎的原理</SPAN></P>
<P><SPAN>說到引擎,游戲迷們都很熟悉。游戲引擎是一個為運行某一類游戲的機器設計的能夠被機器識別的代碼(指令)集合。它象一個發動機,控制著游戲的運行。一個游戲作品可以分為游戲引擎和游戲資源兩大部分。游戲資源包括圖象,聲音,動畫等部分,列一個公式就是:游戲</SPAN><SPAN>=</SPAN><SPAN>引擎(程序代碼)</SPAN><SPAN>+</SPAN><SPAN>資源(圖象,聲音,動畫等)。游戲引擎則是按游戲設計的要求順序的調用這些資源。</SPAN></P>
<P><SPAN>二</SPAN> <SPAN>角色扮演游戲的制作</SPAN></P>
<P><SPAN>一個完整的角色扮演游戲的制作從大的分工來說可以分為:策劃,程序設計,美工,音樂制作以及項目管理</SPAN><SPAN>,</SPAN><SPAN>后期的測試</SPAN><SPAN>等。</SPAN></P>
<P><SPAN>策劃主要任務是設計游戲的劇情,類型以及模式等,并分析游戲的復雜性有多大,內容有多少,策劃的進度要多快等因素。</SPAN></P>
<P><SPAN>程序設計的任務是用某種編程語言來完成游戲的設計,并與策劃配合,達到預期的目的。</SPAN></P>
<P><SPAN>美工主要是根據游戲的時代背景與主題設計游戲的場景及各種角色的圖象。</SPAN></P>
<P><SPAN>音樂制作是根據游戲的劇情和背景制作游戲的音樂與音效。</SPAN></P>
<P><SPAN>項目管理主要是控制游戲制作的進程,充分利用現有的資源(人員,資金,設備等),以達到用盡量少的資金實現最大的收益。</SPAN></P>
<P><SPAN>后期的測試也是非常重要的一個環節,對于一個幾十人花費幾個月甚至是幾年時間制作的游戲,測試往往能找到許多問題,只有改進程序才能確保游戲的安全發行。</SPAN><SPAN>
</SPAN></P>
<P><SPAN>由于文章主要是講解游戲程序的制作的,所以</SPAN><SPAN>策劃,美工,音樂制作等方面請讀者參考其它文章,下面我就講講游戲程序的設計。</SPAN></P>
<P><SPAN>(一)<SPAN> </SPAN></SPAN><SPAN>開發工具與主要技術</SPAN></P>
<P><SPAN>1.</SPAN><SPAN>件開發工具</SPAN></P>
<P><SPAN>游戲程序開發工具有很多,在不同游戲平臺上有不同的開發工具。在個人計算機上,可以用目前流性的軟件開發工具,比如:</SPAN><SPAN>C</SPAN><SPAN>,</SPAN><SPAN>C++</SPAN><SPAN>,</SPAN><SPAN>VC++</SPAN><SPAN>,</SPAN><SPAN>Delphi</SPAN><SPAN>,</SPAN><SPAN>C++
Builder</SPAN><SPAN>等。由于</SPAN><SPAN>Windows</SPAN><SPAN>操作系統的普及和其強大的多媒體功能,越來越多的游戲支持</SPAN><SPAN>Windows</SPAN><SPAN>操作系統。由于</SPAN><SPAN>VC</SPAN><SPAN>是微軟的產品,用它來編寫</SPAN><SPAN>Windows</SPAN><SPAN>程序有強大的程序接口和豐富的開發資源的支持,加之</SPAN><SPAN>VC</SPAN><SPAN>嚴謹的內存管理,在堆棧上良好的分配處理,生成代碼的體積小,穩定性高的優點,所以</SPAN><SPAN>VC++</SPAN><SPAN>就成為目前游戲的主流開發工具。</SPAN></P>
<P><SPAN>2.DirectX</SPAN><SPAN>組件的知識</SPAN></P>
<P><SPAN>談到</SPAN><SPAN>Windows</SPAN><SPAN>系統下的游戲開發,我們就要說一下微軟的</SPAN><SPAN>DirectX
SDK</SPAN><SPAN>。</SPAN></P>
<P><SPAN>Windows</SPAN><SPAN>系統有一個主要優點是應用程序和設備之間的獨立性。然而應用程序的設備無關性是通過犧牲部分速度和效率的到的,</SPAN><SPAN>Windows</SPAN><SPAN>在硬件和軟件間添加了中間抽象層,通過這些中間層我們的應用程序才能在不同的硬件上游刃有余。但是,我們因此而不能完全利用硬件的特征來獲取最大限度的運算和顯示速度。這一點在編寫</SPAN><SPAN>Windows</SPAN><SPAN>游戲時是致命的,</SPAN><SPAN>DirectX</SPAN><SPAN>便是為解決這個問題而設計的。</SPAN><SPAN>DirectX</SPAN><SPAN>由快速的底層庫組成并且沒有給游戲設計添加過多的約束。微軟的</SPAN><SPAN>DirectX</SPAN><SPAN>軟件開發工具包(</SPAN><SPAN>SDK</SPAN><SPAN>)提供了一套優秀的應用程序編程接口(</SPAN><SPAN>APIs</SPAN><SPAN>),這個編程接口可以提供給你開發高質量、實時的應用程序所需要的各種資源。</SPAN></P>
<P><SPAN>DirectX</SPAN><SPAN>的</SPAN><SPAN>6</SPAN><SPAN>個組件分別是:</SPAN></P>
<P><SPAN>DirectDraw</SPAN><SPAN>:</SPAN>
<SPAN>使用頁面切換的方法實現動畫,它不僅可以訪問系統內存,還可以訪問顯示內存。</SPAN></P>
<P><SPAN>Direct3D</SPAN><SPAN>:</SPAN><SPAN>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -