角色扮演遊戲引擎的設計原理與分析(轉)

post0發表於2007-08-12
角色扮演遊戲引擎的設計原理與分析(轉)[@more@]

  角色扮演遊戲(RPG)是深受廣大遊戲迷們喜愛的一種遊戲, 它以獨特的互動性和故事性吸引了無數的玩家。它向人們提供了超出現實生活的廣闊的虛擬世界,使人們能夠嘗試扮演不同的角色,去經歷和體驗各種不同的人生旅程或奇幻經歷。這些體驗都是在現實生活中無法實現的。在玩過許多遊戲後,許多玩家都不再僅僅滿足於一個遊戲玩家的身份,而會思考遊戲是如何製作的,並且打算製作一個自己的遊戲,網上的各種遊戲製作小組更是如雨後春筍般湧現。下面我就給大家介紹一下角色扮演遊戲引擎的原理與製作,希望能對遊戲製作愛好者有所幫助。

  

  一 遊戲引擎的原理

  說到引擎,遊戲迷們都很熟悉。遊戲引擎是一個為執行某一類遊戲的機器設計的能夠被機器識別的程式碼(指令)集合。它象一個發動機,控制著遊戲的執行。一個遊戲作品可以分為遊戲引擎和遊戲資源兩大部分。遊戲資源包括圖象,聲音,動畫等部分,列一個公式就是:遊戲=引擎(程式程式碼)+資源(圖象,聲音,動畫等)。遊戲引擎則是按遊戲設計的要求順序的呼叫這些資源。

  

  二 角色扮演遊戲的製作

  一個完整的角色扮演遊戲的製作從大的分工來說可以分為:策劃,程式設計,美工,音樂製作以及專案管理,後期的測試等。

  

  策劃主要任務是設計遊戲的劇情,型別以及模式等,並分析遊戲的複雜性有多大,內容有多少,策劃的進度要多快等因素。

  

  程式設計的任務是用某種程式語言來完成遊戲的設計,並與策劃配合,達到預期的目的。

  

  美工主要是根據遊戲的時代背景與主題設計遊戲的場景及各種角色的圖象。

  

  音樂製作是根據遊戲的劇情和背景製作遊戲的音樂與音效。

  

  專案管理主要是控制遊戲製作的程式,充分利用現有的資源(人員,資金,裝置等),以達到用盡量少的資金實現最大的收益。

  

  後期的測試也是非常重要的一個環節,對於一個幾十人花費幾個月甚至是幾年時間製作的遊戲,測試往往能找到許多問題,只有改程式序才能確保遊戲的安全發行。

  

  由於文章主要是講解遊戲程式的製作的,所以策劃,美工,音樂製作等方面請讀者參考其它文章,下面我就講講遊戲程式的設計。

  

  (一)  開發工具與主要技術

  

  1.件開發工具

  

  遊戲程式開發工具有很多,在不同遊戲平臺上有不同的開發工具。在個人計算機上,可以用目前流性的軟體開發工具,比如:C,C++,VC++,Delphi,C++ Builder等。由於Windows作業系統的普及和其強大的多媒體功能,越來越多的遊戲支援Windows作業系統。由於VC是微軟的產品,用它來編寫Windows程式有強大的程式介面和豐富的開發資源的支援,加之VC嚴謹的記憶體管理,在堆疊上良好的分配處理,生成程式碼的體積小,穩定性高的優點,所以VC++就成為目前遊戲的主流開發工具。

  

  2.DirectX元件的知識

  

  談到Windows系統下的遊戲開發,我們就要說一下微軟的DirectX SDK。

  

  Windows系統有一個主要優點是應用程式和裝置之間的獨立性。然而應用程式的裝置無關性是透過犧牲部分速度和效率的到的,Windows在硬體和軟體間新增了中間抽象層,透過這些中間層我們的應用程式才能在不同的硬體上游刃有餘。但是,我們因此而不能完全利用硬體的特徵來獲取最大限度的運算和顯示速度。這一點在編寫Windows遊戲時是致命的,DirectX便是為解決這個問題而設計的。DirectX由快速的底層庫組成並且沒有給遊戲設計新增過多的約束。微軟的DirectX軟體開發工具包(SDK)提供了一套優秀的應用程式程式設計介面(APIs),這個程式設計介面可以提供給你開發高質量、實時的應用程式所需要的各種資源。

  

  DirectX的6個元件分別是:

  

  DirectDraw: 使用頁面切換的方法實現動畫,它不僅可以訪問系統記憶體,還可以訪問顯示記憶體。

  

  Direct3D:  提供了3D硬體介面。

  

  DirectSound: 立體聲和3D聲音效果,同時管理音效卡的記憶體。

  

  DirectPlay: 支援開發多人網路遊戲,並能處理遊戲中網路之間的通訊問題。

  

  DirectInput: 為大量的裝置提供輸入支援。

  

  DirectSetup: 自動安裝DirectX驅動程式。

  

  隨著DirectX版本的提高,還增加了音樂播放的DirectMusic。

  

  3.AlphaBlend 技術

  

  現在許多遊戲為了達到光影或圖象的透明效果都會採用AlphaBlend 技術。所謂AlphaBlend技術,其實就是按照"Alpha"混合向量的值來混合源畫素和目標畫素,一般用來處理半透明效果。在計算機中的圖象可以用R(紅色),G(綠色),B(藍色)三原色來表示。假設一幅圖象是A,另一幅透明的圖象是B,那麼透過B去看A,看上去的圖象C就是B和A的混合圖象,設B圖象的透明度為alpha(取值為0-1,0為完全透明,1為完全不透明),Alpha混合公式如下:

  

  R(C)=alpha*R(B)+(1-alpha)*R(A)

  

  G(C)=alpha*G(B)+(1-alpha)*G(A)

  

  B(C)=alpha*B(B)+(1-alpha)*B(A)

  

  R(x)、G(x)、B(x)分別指顏色x的RGB分量原色值。從上面的公式可以知道,Alpha其實是一個決定混合透明度的數值。應用Alpha混合技術,可以實現遊戲中的許多特效,比如火光、煙霧、陰影、動態光源等半透明效果。

  

  4.A*演算法

  

  在許多遊戲中要用滑鼠控制人物運動,而且讓人物從目前的位置走到目標位置應該走最短的路徑。這就要用到最短路徑搜尋演算法即A*演算法了。

  

  A*演算法實際是一種啟發式搜尋,所謂啟發式搜尋,就是利用一個估價函式評估每次的的決策的價值,決定先嚐試哪一種方案。如果一個估價函式可以找出最短的路徑,我們稱之為可採納性。A*演算法是一個可採納的最好優先演算法。A*演算法的估價函式可表示為:

  

  f(n) = g(n) + h(n)

  

  這裡,f(n)是節點n的估價函式,g(n)是起點到終點的最短路徑值,h(n)是n到目標的最斷路經的啟發值。由於A*演算法比較複雜,限於篇幅,在此簡單介紹一下,具體理論朋友們可以看人工智慧方面的書籍瞭解詳細的情況。

  

  其它技術還有粒子系統,音訊與影片的呼叫,圖象檔案的格式與資訊儲存等,大家可以在學好DirectX的基礎上逐漸學習更多的技術。

  

  (二)遊戲的具體制作

  

  1.地圖編輯器的製作

  

  RPG遊戲往往要有大量的場景,場景中根據需要可以有草地,湖泊,樹木,房屋,傢俱等道俱,由於一個遊戲需要很多場景且地圖越來越大,為了節省空間,提高圖象檔案的可重用性,RPG遊戲的畫面採用很多重複的單元(可以叫做“圖塊”)所構成的,這就要用到地圖編輯器了。我們在製作遊戲引擎前,要完成地圖編輯器的製作。在 RPG遊戲裡,場景的構成,是圖塊排列順序的記錄。首先制定一個場景構成檔案的格式,在這個檔案裡記錄構成場景所需要的圖塊的排列順序,因為我們已經為每個圖塊建立了索引,所以只需要記錄這些索引就可以了。一個場景的構成,是分成幾層來完成的:地面,建築和植物,傢俱擺設,和在場景中活動的人物或者物體(比如飄揚的旗幟),按照一定的順序把它們依次顯示到螢幕上,就形成了一個豐富多采的場景。我們可以用陣列來表示地圖場景的生成過程。

  

  MapData[X][Y]; //地圖資料,X表示地圖寬度,Y表示地圖高度

  

  Picture[num]; //道具的圖片,num表示道具的總數

  

  void MakeBackGround() //生成場景函式

  

  {

  

  int n;

  

  for( int i=0; i  

  for( int j=0; j  

  {

  

  n=MapData[ i ][ j ]; //取得該位置的道具編號

  

  Draw( j*32, i*32, Picture[n]); //在此位置(j*32,i*32)畫道具

  

  }

  

  }

  

  2.遊戲的模組的劃分

  

  遊戲按功能分為:訊息處理系統、場景顯示及行走系統、打鬥系統三大主要部分。其中又以訊息處理系統為核心模組,其餘部分緊緊圍繞它執行。

  

  一:訊息處理系統

  

  訊息處理系統是遊戲的核心部分。遊戲用到的訊息處理系統先等待訊息,然後根據收到的訊息轉到相應的函式進行處理。比如:主角碰到敵人後,我們就讓程式產生‘打鬥訊息’,訊息處理系統收到這個訊息後就會馬上轉到打鬥模組中去。訊息處理的大體框架如下:

  

  //定義程式中要用到的變數

  

  DWORD Message; //訊息變數

  

  WinMain() //進入程式

  

  { 初始化主視窗;

  

  初始化DirectDraw環境,並調入程式需要的圖形、地圖資料;

  

  while( 1 ) //訊息迴圈

  

  { switch( Message )

  

  { case 行走訊息: 行走模組();

  

  case 打鬥訊息: 打鬥模組();

  

  case 事件訊息: 事件模組();

  

  }

  

  }

  

  }

  

  二:場景顯示及行走系統

  

  作為RPG遊戲,其所有事件的發生幾乎都是和場景有關,例如:不同的地方會碰到不同的敵人、與不同的人對話得知不同的事情等。鑑於這部分的重要性,我們可再將它劃分為:背景顯示、行走 和 事件發生 三個子模組,分別處理各自的功能。下面進行具體分析。

  

  (一)背景顯示

  

  程式執行後,先讀取前面地圖編輯器製作的場景所需要的圖塊的排列順序,按照排列順序將圖象拼成一個完整的場景,一般做法是:在記憶體中開闢一到兩個螢幕快取區,事先把即將顯示的圖象資料準備在快取區內,然後一次性搬家:把它們傳送到真正的螢幕緩衝區內。

  

  遊戲用到的圖片則事先製作好並存於另外的圖形檔案中。地圖編輯器制

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-951884/,如需轉載,請註明出處,否則將追究法律責任。

相關文章