青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當(dāng)自強(qiáng)而不息

【ZT】角色扮演游戲引擎的設(shè)計原理

鄭州 趙旺

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

一 游戲引擎的原理

說到引擎,游戲迷們都很熟悉。游戲引擎是一個為運(yùn)行某一類游戲的機(jī)器設(shè)計的能夠被機(jī)器識別的代碼(指令)集合。它象一個發(fā)動機(jī),控制著游戲的運(yùn)行。一個游戲作品可以分為游戲引擎和游戲資源兩大部分。游戲資源包括圖象,聲音,動畫等部分,列一個公式就是:游戲=引擎(程序代碼)+資源(圖象,聲音,動畫等)。游戲引擎則是按游戲設(shè)計的要求順序的調(diào)用這些資源。

二 角色扮演游戲的制作

一個完整的角色扮演游戲的制作從大的分工來說可以分為:策劃,程序設(shè)計,美工,音樂制作以及項目管理,后期的測試等。
策劃主要任務(wù)是設(shè)計游戲的劇情,類型以及模式等,并分析游戲的復(fù)雜性有多大,內(nèi)容有多少,策劃的進(jìn)度要多快等因素。
程序設(shè)計的任務(wù)是用某種編程語言來完成游戲的設(shè)計,并與策劃配合,達(dá)到預(yù)期的目的。
美工主要是根據(jù)游戲的時代背景與主題設(shè)計游戲的場景及各種角色的圖象。
音樂制作是根據(jù)游戲的劇情和背景制作游戲的音樂與音效。
項目管理主要是控制游戲制作的進(jìn)程,充分利用現(xiàn)有的資源(人員,資金,設(shè)備等),以達(dá)到用盡量少的資金實(shí)現(xiàn)最大的收益。
后期的測試也是非常重要的一個環(huán)節(jié),對于一個幾十人花費(fèi)幾個月甚至是幾年時間制作的游戲,測試往往能找到許多問題,只有改進(jìn)程序才能確保游戲的安全發(fā)行。

由于文章主要是講解游戲程序的制作的,所以策劃,美工,音樂制作等方面請讀者參考其它文章,下面我就講講游戲程序的設(shè)計。

(一)    開發(fā)工具與主要技術(shù)

1.開發(fā)工具

游戲程序開發(fā)工具有很多,在不同游戲平臺上有不同的開發(fā)工具。在個人計算機(jī)上,可以用目前流性的軟件開發(fā)工具,比如:C,C++,VC++,Delphi,C++ Builder等。由于Windows操作系統(tǒng)的普及和其強(qiáng)大的多媒體功能,越來越多的游戲支持Windows操作系統(tǒng)。由于VC是微軟的產(chǎn)品,用它來編寫Windows程序有強(qiáng)大的程序接口和豐富的開發(fā)資源的支持,加之VC嚴(yán)謹(jǐn)?shù)膬?nèi)存管理,在堆棧上良好的分配處理,生成代碼的體積小,穩(wěn)定性高的優(yōu)點(diǎn),所以VC++就成為目前游戲的主流開發(fā)工具。

2.DirectX組件的知識

談到Windows系統(tǒng)下的游戲開發(fā),我們就要說一下微軟的DirectX SDK。

Windows系統(tǒng)有一個主要優(yōu)點(diǎn)是應(yīng)用程序和設(shè)備之間的獨(dú)立性。然而應(yīng)用程序的設(shè)備無關(guān)性是通過犧牲部分速度和效率的到的,Windows在硬件和軟件間添加了中間抽象層,通過這些中間層我們的應(yīng)用程序才能在不同的硬件上游刃有余。但是,我們因此而不能完全利用硬件的特征來獲取最大限度的運(yùn)算和顯示速度。這一點(diǎn)在編寫Windows游戲時是致命的,DirectX便是為解決這個問題而設(shè)計的。DirectX由快速的底層庫組成并且沒有給游戲設(shè)計添加過多的約束。微軟的DirectX軟件開發(fā)工具包(SDK)提供了一套優(yōu)秀的應(yīng)用程序編程接口(APIs),這個編程接口可以提供給你開發(fā)高質(zhì)量、實(shí)時的應(yīng)用程序所需要的各種資源。

DirectX的6個組件分別是:

DirectDraw: 使用頁面切換的方法實(shí)現(xiàn)動畫,它不僅可以訪問系統(tǒng)內(nèi)存,還可以訪問顯示內(nèi)存。
Direct3D:   提供了3D硬件接口。
DirectSound: 立體聲和3D聲音效果,同時管理聲卡的內(nèi)存。
DirectPlay:  支持開發(fā)多人網(wǎng)絡(luò)游戲,并能處理游戲中網(wǎng)絡(luò)之間的通信問題。
DirectInput:  為大量的設(shè)備提供輸入支持。
DirectSetup: 自動安裝DirectX驅(qū)動程序。

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

3.AlphaBlend 技術(shù)

現(xiàn)在許多游戲?yàn)榱诉_(dá)到光影或圖象的透明效果都會采用AlphaBlend 技術(shù)。所謂AlphaBlend技術(shù),其實(shí)就是按照"Alpha"混合向量的值來混合源像素和目標(biāo)像素,一般用來處理半透明效果。在計算機(jī)中的圖象可以用 R(紅色),G(綠色),B(藍(lán)色)三原色來表示。假設(shè)一幅圖象是A,另一幅透明的圖象是B,那么透過B去看A,看上去的圖象C就是B和A的混合圖象,設(shè) 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其實(shí)是一個決定混合透明度的數(shù)值。應(yīng)用Alpha混合技術(shù),可以實(shí)現(xiàn)游戲中的許多特效,比如火光、煙霧、陰影、動態(tài)光源等半透明效果。

4.A*算法

在許多游戲中要用鼠標(biāo)控制人物運(yùn)動,而且讓人物從目前的位置走到目標(biāo)位置應(yīng)該走最短的路徑。這就要用到最短路徑搜索算法即A*算法了。

A*算法實(shí)際是一種啟發(fā)式搜索,所謂啟發(fā)式搜索,就是利用一個估價函數(shù)評估每次的的決策的價值,決定先嘗試哪一種方案。如果一個估價函數(shù)可以找出最短的路徑,我們稱之為可采納性。A*算法是一個可采納的最好優(yōu)先算法。A*算法的估價函數(shù)可表示為:

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

這里,f(n)是節(jié)點(diǎn)n的估價函數(shù),g(n)是起點(diǎn)到終點(diǎn)的最短路徑值,h(n)是n到目標(biāo)的最斷路經(jīng)的啟發(fā)值。由于A*算法比較復(fù)雜,限于篇幅,在此簡單介紹一下,具體理論朋友們可以看人工智能方面的書籍了解詳細(xì)的情況。

其它技術(shù)還有粒子系統(tǒng),音頻與視頻的調(diào)用,圖象文件的格式與信息存儲等,大家可以在學(xué)好DirectX的基礎(chǔ)上逐漸學(xué)習(xí)更多的技術(shù)。

(二)游戲的具體制作

   1.地圖編輯器的制作

RPG游戲往往要有大量的場景,場景中根據(jù)需要可以有草地,湖泊,樹木,房屋,家具等道俱,由于一個游戲需要很多場景且地圖越來越大,為了節(jié)省空間,提高圖象文件的可重用性,RPG游戲的畫面采用很多重復(fù)的單元(可以叫做“圖塊”)所構(gòu)成的,這就要用到地圖編輯器了。我們在制作游戲引擎前,要完成地圖編輯器的制作。在 RPG游戲里,場景的構(gòu)成,是圖塊排列順序的記錄。首先制定一個場景構(gòu)成文件的格式,在這個文件里記錄構(gòu)成場景所需要的圖塊的排列順序,因?yàn)槲覀円呀?jīng)為每個圖塊建立了索引,所以只需要記錄這些索引就可以了。一個場景的構(gòu)成,是分成幾層來完成的:地面,建筑和植物,家具擺設(shè),和在場景中活動的人物或者物體(比如飄揚(yáng)的旗幟),按照一定的順序把它們依次顯示到屏幕上,就形成了一個豐富多采的場景。我們可以用數(shù)組來表示地圖場景的生成過程。

MapData[X][Y]; //地圖數(shù)據(jù),X表示地圖寬度,Y表示地圖高度

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

void MakeBackGround() //生成場景函數(shù)


   
int n;

    forint i=0; i<Y; i++//共Y行
    {
        forint j=0; j<X; j++//共X列
        {
            n
=MapData[ i ][ j ]; //取得該位置的道具編號

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

  2.游戲的模塊的劃分

 游戲按功能分為:消息處理系統(tǒng)、場景顯示及行走系統(tǒng)、打斗系統(tǒng)三大主要部分。其中又以消息處理系統(tǒng)為核心模塊,其余部分緊緊圍繞它運(yùn)行。

    一:消息處理系統(tǒng)

    消息處理系統(tǒng)是游戲的核心部分。游戲用到的消息處理系統(tǒng)先等待消息,然后根據(jù)收到的消息轉(zhuǎn)到相應(yīng)的函數(shù)進(jìn)行處理。比如:主角碰到敵人后,我們就讓程序產(chǎn)生‘打斗消息’,消息處理系統(tǒng)收到這個消息后就會馬上轉(zhuǎn)到打斗模塊中去。消息處理的大體框架如下:
     
//定義程序中要用到的變量

DWORD Message; 
//消息變量

WinMain() 
//進(jìn)入程序

     初始化主窗口;

     初始化DirectDraw環(huán)境,并調(diào)入程序需要的圖形、地圖數(shù)據(jù);

   
while1 ) //消息循環(huán)
    {
         switch( Message )
         {
         case 行走消息: 
                行走模塊();
        
case 打斗消息:
                打斗模塊();
        
case 事件消息:
                事件模塊();
          }
    }
}

    二:場景顯示及行走系統(tǒng)

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

  (一)背景顯示

程序運(yùn)行后,先讀取前面地圖編輯器制作的場景所需要的圖塊的排列順序,按照排列順序?qū)D象拼成一個完整的場景,一般做法是:在內(nèi)存中開辟一到兩個屏幕緩存區(qū),事先把即將顯示的圖象數(shù)據(jù)準(zhǔn)備在緩存區(qū)內(nèi),然后一次性搬家:把它們傳送到真正的屏幕緩沖區(qū)內(nèi)。

游戲用到的圖片則事先制作好并存于另外的圖形文件中。地圖編輯器制作的場景文件僅僅是對應(yīng)的數(shù)據(jù),而不是真正的圖片。在游戲中生成場景就是地圖編輯的逆過程,一個是根據(jù)場景生成數(shù)據(jù),而另一個是根據(jù)數(shù)據(jù)生成場景。

  (二)行走

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



(三)事件發(fā)生

事件發(fā)生原理就是把相應(yīng)事件的序號存儲在地圖的某些格子中,當(dāng)主角一踏入這個格子就會觸發(fā)對應(yīng)事件。例如:在游戲開始時,主角是在他的家里。他要是想出去的話,就需要執(zhí)行場景切換這個處理函數(shù)。我們假定該事件的編號為001,那么在地圖上把家門外路口處的格子值設(shè)為001。這樣主角走到路口時,編號為001的場景切換函數(shù)就會被觸發(fā),于是主角便到了下一個場景中。程序具體如下:
     
void MessageLoop( int Msg )  //消息循環(huán)
{
      char AddressName[16];  //數(shù)組AddressName[16]用來存儲主角所在地點(diǎn)的名稱

      switch( Msg )
      {     

       
case ADDRESS == 001:    // 由ADDRESS的值決定場景值(出門)
           ScreenX
=12; ScreenY=0;     //初始化游戲背景位置  
           Hero.x
=360; Hero.y=80;//主角坐標(biāo)

           Move();
//主角移動函數(shù)

          
//以下程序用來顯示主角所在地點(diǎn)

           sprintf(AddressName,
"下一幅游戲場景的名稱");

           PrintText(lpDDSPrimary, 
280330,AddressName , RGB(255,255,255));//在屏幕上顯示出場景的名稱

      
    break;
    }
}

    三:打斗系統(tǒng)

絕大多數(shù)的RPG都是有戰(zhàn)斗存在的,因此,打斗系統(tǒng)就成為RPG系統(tǒng)中很重要的一環(huán)。有不少RPG游戲采用回合制打斗方式,因?yàn)閷?shí)現(xiàn)起來較為簡單。和打斗緊密相關(guān)的是升級,通常在一場戰(zhàn)斗結(jié)束后,主角的經(jīng)驗(yàn)值都會增加。而當(dāng)經(jīng)驗(yàn)值到達(dá)一定程度時,角色就升級了。

上面我簡要的介紹了角色扮演游戲的制作,由于寫這篇文章的目的是讓讀者對角色扮演游戲的制作有一個基本的了解,所以讀者朋友們可以研究相關(guān)資料。歡迎與各位朋友們討論游戲制作方面的問題,我的E_mail:creativesoftfan@sina.com   網(wǎng)站:http://creativesoft.home.shangdu.net

posted on 2007-05-15 01:45 lovedday 閱讀(1007) 評論(0)  編輯 收藏 引用 所屬分類: ■ Game Program

公告

導(dǎo)航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人综合| 亚洲激情中文1区| 韩国三级电影久久久久久| 国产精品久久久亚洲一区| 国产精品久久激情| 国产日产精品一区二区三区四区的观看方式 | 亚洲欧洲在线观看| 欧美激情一区在线| 亚洲伦理自拍| 香蕉国产精品偷在线观看不卡 | 亚洲激情网站| 亚洲美女91| 午夜国产欧美理论在线播放| 久久久夜色精品亚洲| 欧美日韩和欧美的一区二区| 国产精品网站在线观看| 激情欧美日韩| 中文日韩欧美| 久久久噜噜噜久久人人看| 亚洲国产另类 国产精品国产免费| av72成人在线| 美国成人直播| 国产女同一区二区| 一本高清dvd不卡在线观看| 久久狠狠婷婷| 日韩视频在线播放| 久久婷婷国产麻豆91天堂| 国产精品精品视频| 亚洲精品国久久99热| 久久精品国产精品亚洲精品| 99精品国产福利在线观看免费| 亚洲专区一区| 裸体歌舞表演一区二区| 国产精品综合| 一区二区欧美视频| 裸体一区二区三区| 亚洲欧美综合网| 欧美视频一区二区三区在线观看| 在线不卡中文字幕播放| 久久成人免费视频| 亚洲午夜性刺激影院| 欧美日韩亚洲不卡| 99精品久久久| 亚洲福利视频二区| 老司机午夜精品视频在线观看| 国产欧美一区在线| 欧美在线3区| 亚洲一区二区三区三| 欧美色大人视频| 一本大道久久精品懂色aⅴ| 麻豆成人综合网| 久久精品人人做人人综合| 国产精品嫩草99av在线| 亚洲欧美日韩第一区| 宅男噜噜噜66国产日韩在线观看| 免费黄网站欧美| 91久久精品国产91久久性色| 欧美成人精品一区二区| 久久一二三四| 亚洲欧洲日韩综合二区| 亚洲精品1区2区| 欧美日韩四区| 亚洲男女自偷自拍| 亚洲欧美国产不卡| 国产亚洲欧美一级| 久久久久久高潮国产精品视| 久久超碰97人人做人人爱| 狠狠久久婷婷| 麻豆9191精品国产| 欧美激情一区二区三区不卡| 夜夜爽夜夜爽精品视频| 国产精品99久久不卡二区| 国产精品久久午夜| 久久久久网站| 免费成人性网站| 亚洲视频在线二区| 午夜精品一区二区三区电影天堂 | 最新亚洲电影| 欧美日韩一区三区四区| 欧美一区二区三区精品电影| 久久精品国产综合精品| 亚洲精品国产精品国自产观看浪潮| 亚洲国产日韩欧美一区二区三区| 欧美日本亚洲视频| 久久国产福利| 欧美电影在线观看| 伊人成人在线视频| 最新国产拍偷乱拍精品| 亚洲激情电影在线| 国产精品免费一区二区三区在线观看 | 午夜精品久久久久久久99樱桃| 极品av少妇一区二区| 亚洲国产经典视频| 国产精品亚洲综合| 亚洲高清不卡在线| 国产亚洲精品v| 亚洲肉体裸体xxxx137| 国产亚洲精品久久久久久| 亚洲国产一区二区精品专区| 国产精品男女猛烈高潮激情 | 午夜亚洲福利| 亚洲欧洲在线一区| 午夜精品久久久久久久蜜桃app| 亚洲欧洲一区| 欧美一级艳片视频免费观看| 99国产精品久久久久久久久久 | 日韩视频一区| 伊人精品在线| 亚洲婷婷综合色高清在线 | 亚洲成色999久久网站| 国产精品一区二区男女羞羞无遮挡 | 国产日韩一区在线| 日韩视频免费在线| 亚洲日韩成人| 久久只有精品| 久久久久久尹人网香蕉| 国产精品久久久久国产a级| 亚洲片在线资源| 亚洲欧洲在线一区| 久久在精品线影院精品国产| 久久久久久久网站| 国产偷国产偷亚洲高清97cao| 在线一区二区三区四区| 日韩午夜电影| 欧美激情精品久久久久久黑人| 老司机久久99久久精品播放免费 | 一区二区三区视频在线看| 亚洲精选在线| 欧美福利精品| 亚洲第一区在线观看| 黄色一区二区三区四区| 欧美一区精品| 欧美一区二区三区视频免费播放| 欧美一级夜夜爽| 欧美视频久久| 亚洲精品一区二区在线观看| 亚洲伦理久久| 欧美日韩国语| 亚洲精品免费网站| 亚洲视频一二三| 国产精品免费一区二区三区观看| 99re这里只有精品6| 亚洲影音先锋| 国产精品日韩在线播放| 午夜精品久久久久久久蜜桃app | 久久久亚洲一区| 国内精品久久久久影院色 | 欧美成人午夜视频| 美女日韩在线中文字幕| 亚洲国产一区二区三区a毛片| 免费人成网站在线观看欧美高清 | 久久久国产亚洲精品| 韩国美女久久| 麻豆久久精品| 999亚洲国产精| 欧美在线在线| 在线欧美三区| 欧美激情视频网站| 亚洲天堂免费观看| 老司机午夜精品视频在线观看| 亚洲高清中文字幕| 欧美人成在线视频| 亚洲欧美一区二区在线观看| 久久一区二区精品| 一区二区精品国产| 国产一区二区三区在线观看免费 | 亚洲国产婷婷| 亚洲免费视频网站| 在线观看免费视频综合| 欧美日韩国产综合在线| 久久xxxx精品视频| 最新国产拍偷乱拍精品| 久久国产精品一区二区| 亚洲精品国产精品乱码不99| 国产精品色午夜在线观看| 麻豆精品传媒视频| 亚洲在线视频网站| 亚洲成色www久久网站| 欧美一区日韩一区| 日韩午夜精品视频| 激情久久中文字幕| 国产精品久久一卡二卡| 欧美mv日韩mv国产网站| 欧美一级片一区| 亚洲精品自在久久| 欧美激情一区二区三区| 久久精品国产一区二区三| 99在线精品视频在线观看| 激情视频一区二区三区| 国产精品区一区二区三| 欧美理论在线播放| 久久在线免费观看| 久久精品国产免费看久久精品| 亚洲美女啪啪| 国产午夜精品理论片a级大结局| 午夜精品在线观看| 99视频热这里只有精品免费| 欧美a级理论片| 久久久999精品免费| 先锋影音久久久|