角色扮演遊戲引擎的設計原理

2021-03-31 08:56:57 字數 3816 閱讀 7447

角色扮演遊戲引擎的設計原理

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

一 遊戲引擎的原理

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

二 角色扮演遊戲的製作

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

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

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

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

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

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

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

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

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

1.件開發工具

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

2.directx元件的知識

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*演算法比較複雜,限於篇幅,在此簡單介紹一下,具體理論朋友們可以看人工智慧方面的書籍了解詳細的情況。

(二)遊戲的具體製作

1.地圖編輯器的製作

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

mapdata[x][y]; //地圖資料,x表示地圖寬度,y表示地圖高度

picture[num]; //道具的,num表示道具的總數

void makebackground() //生成場景函式}}

二:場景顯示及行走系統

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

(一)背景顯示

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

遊戲用到的則事先製作好並存於另外的圖形檔案中。地圖編輯器製作的場景檔案僅僅是對應的資料,而不是真正的。在遊戲中生成場景就是地圖編輯的逆過程,乙個是根據場景生成資料,而另乙個是根據資料生成場景。

(二)行走

要讓主角在場景中行走,至少要有上、下、左、右四個行走方向,每個方向4幅圖(站立、邁左腿、邁右腿、邁左腿),如圖:遊戲中一定要將的背景設為透明,這樣在畫人物的時候就不會覆蓋上背景色了(這一技術directdraw中只要用setcolorkey()函式將原背景色過濾掉就行了)。我們讓主角位置不動,而使場景移動,即採用滾屏技術來實現角色在場景上移動。這樣角色一直保持在螢幕的正中間,需要做的工作只是根據行走方向和步伐不停變換而已。行走時的障礙物判斷也是每乙個場景中必定要有的,有一些道具如樹木、房屋等是不可跨越的。對此我主要用乙個二維陣列來對應乙個場景,每乙個陣列值代表場景的一小格(見圖3)。有障礙的地方,該陣列的對應值為1,可通過的地方的值為0。

(三)事件發生

事件發生原理就是把相應事件的序號儲存在地圖的某些格仔中,當主角一踏入這個格仔就會觸發對應事件。例如:在遊戲開始時,主角是在他的家裡。他要是想出去的話,就需要執行場景切換這個處理函式。我們假定該事件的編號為001,那麼在地圖上把家門外路口處的格仔值設為001。這樣主角走到路口時,編號為001的場景切換函式就會被觸發,於是主角便到了下乙個場景中。程式具體如下:

void messageloop( int msg ) //訊息迴圈

}三:打鬥系統

絕大多數的rpg都是有戰鬥存在的,因此,打鬥系統就成為rpg系統中很重要的一環。有不少rpg遊戲採用回合制打鬥方式,因為實現起來較為簡單。和打鬥緊密相關的是公升級,通常在一場戰鬥結束後,主角的經驗值都會增加。而當經驗值到達一定程度時,角色就公升級了。

上面我簡要的介紹了角色扮演遊戲的製作,由於寫這篇文章的目的是讓讀者對角色扮演遊戲的製作有乙個基本的了解,所以讀者朋友們可以研究相關資料。

角色扮演遊戲引擎的設計原理

角色扮演遊戲引擎的設計原理 角色扮演遊戲 rpg 是深受廣大遊戲迷們喜愛的一種遊戲,它以獨特的互動性和故事性吸引了無數的玩家。它向人們提供了超出現實生活的廣闊的虛擬世界,使人們能夠嘗試扮演不同的角色,去經歷和體驗各種不同的人生旅程或奇幻經歷。這些體驗都是在現實生活中無法實現的。在玩過許多遊戲後,許多...

角色扮演遊戲引擎的設計原理

角色扮演遊戲引擎的設計原理 角色扮演遊戲 rpg 是深受廣大遊戲迷們喜愛的一種遊戲,它以獨特的互動性和故事性吸引了無數的玩家。它向人們提供了超出現實生活的廣闊的虛擬世界,使人們能夠嘗試扮演不同的角色,去經歷和體驗各種不同的人生旅程或奇幻經歷。這些體驗都是在現實生活中無法實現的。在玩過許多遊戲後,許多...

用DirectX設計角色扮演遊戲

jim adams 所有。本書是為想進入 rpg程式設計專業領域的程式設計師提供的。我想 rpg是最好玩的遊戲種類之一。rpg也是最難製作的。關於 rpg遊戲設計的資訊很難獲取,正因有此需求,我寫了此書。在此書中,我把 rpg遊戲分成若干關鍵元件,並乙個乙個地講述,讓你對這些元件有乙個清晰的認識弱項...