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

posts - 21,  comments - 20,  trackbacks - 0
角色扮演游戲引擎的設計原理--轉自MOVE2008 角色扮演游戲引擎的設計原理   
      角色扮演游戲(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;  
    
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.游戲的模塊的劃分   游戲按功能分為:消息處理系統、場景顯示及行走系統、打斗系統三大主要部分。其中又以消息處理系統為核心模塊,其余部分緊緊圍繞它運行。 一:消息處理系統   消息處理系統是游戲的核心部分。游戲用到的消息處理系統先等待消息,然后根據收到的消息轉到相應的函數進行處理。比如:主角碰到敵人后,我們就讓程序產生‘打斗消息’,消息處理系統收到這個消息后就會馬上轉到打斗模塊中去。消息處理的大體框架如下:
//定義程序中要用到的變量 
DWORD Message; //消息變量 
WinMain() //進入程序 
{  
    初始化主窗口;  
    初始化DirectDraw環境,并調入程序需要的圖形、地圖數據;  
    
while1 ) //消息循環  
    {   
        
switch( Message )   
           
{    
              
case 行走消息: 行走模塊();                case 打斗消息:打斗模塊();                case 事件消息: 事件模塊();   
            }
  
     }
 
}
二:場景顯示及行走系統   作為RPG游戲,其所有事件的發生幾乎都是和場景有關,例如:不同的地方會碰到不同的敵人、與不同的人對話得知不同的事情等。鑒于這部分的重要性,我們可再將它劃分為:背景顯示、行走 和 事件發生 三個子模塊,分別處理各自的功能。下面進行具體分析。 (一)背景顯示   程序運行后,先讀取前面地圖編輯器制作的場景所需要的圖塊的排列順序,按照排列順序將圖象拼成一個完整的場景,一般做法是:在內存中開辟一到兩個屏幕緩存區,事先把即將顯示的圖象數據準備在緩存區內,然后一次性搬家:把它們傳送到真正的屏幕緩沖區內。   游戲用到的圖片則事先制作好并存于另外的圖形文件中。地圖編輯器制作的場景文件僅僅是對應的數據,而不是真正的圖片。在游戲中生成場景就是地圖編輯的逆過程,一個是根據場景生成數據,而另一個是根據數據生成場景。 (二)行走   要讓主角在場景中行走,至少要有上、下、左、右四個行走方向,每個方向4幅圖(站立、邁左腿、邁右腿、邁左腿),如圖:游戲中一定要將圖片的背景設為透明,這樣在畫人物的時候就不會覆蓋上背景色了(這一技術DirectDraw中只要用SetColorKey()函數將原圖片背景色過濾掉就行了)。我們讓主角位置不動,而使場景移動,即采用滾屏技術來實現角色在場景上移動。這樣角色一直保持在屏幕的正中間,需要做的工作只是根據行走方向和步伐不停變換圖片而已。行走時的障礙物判斷也是每一個場景中必定要有的,有一些道具如樹木、房屋等是不可跨越的。對此我主要用一個二維數組來對應一個場景,每一個數組值代表場景的一小格(見圖3)。有障礙的地方,該數組的對應值為1,可通過的地方的值為0。 (三)事件發生   事件發生原理就是把相應事件的序號存儲在地圖的某些格子中,當主角一踏入這個格子就會觸發對應事件。例如:在游戲開始時,主角是在他的家里。他要是想出去的話,就需要執行場景切換這個處理函數。我們假定該事件的編號為001,那么在地圖上把家門外路口處的格子值設為001。這樣主角走到路口時,編號為001的場景切換函數就會被觸發,于是主角便到了下一個場景中。程序具體如下:
void MessageLoop( int Msg ) //消息循環 
{
        
switch( Msg )  
         
{
               
char AddressName[16]; //數組AddressName[16]用來存儲主角所在地點的名稱   
               case ADDRESS == 001// 由ADDRESS的值決定場景值(出門)   
               ScreenX=12
             ScreenY
=0//初始化游戲背景位置                Hero.x=360; 
             Hero.y=80;//主角坐標   
               Move();//主角移動函數   
            
//以下程序用來顯示主角所在地點   
               sprintf(AddressName,"下一幅游戲場景的名稱");
             PrintText(lpDDSPrimary, 
280330,AddressName , RGB(255,255,255));//在屏幕上顯示出場景的名稱
              break;
         }

}
三:打斗系統   絕大多數的RPG都是有戰斗存在的,因此,打斗系統就成為RPG系統中很重要的一環。有不少RPG游戲采用回合制打斗方式,因為實現起來較為簡單。和打斗緊密相關的是升級,通常在一場戰斗結束后,主角的經驗值都會增加。而當經驗值到達一定程度時,角色就升級了。   上面我簡要的介紹了角色扮演游戲的制作,由于寫這篇文章的目的是讓讀者對角色扮演游戲的制作有一個基本的了解,所以讀者朋友們可以研究相關資料
。
posted on 2008-07-18 18:10 Niino 閱讀(140) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(2)

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            樱花yy私人影院亚洲| 影院欧美亚洲| 国产一区二区久久| 一本色道婷婷久久欧美| 韩日精品在线| 国产亚洲aⅴaaaaaa毛片| 欧美激情综合色| 欧美成人精品一区二区三区| 午夜精品久久久久影视| 日韩午夜三级在线| 亚洲精品免费看| 一区二区激情| 欧美专区第一页| 99一区二区| 久久精品国产精品亚洲精品| 久久九九国产精品怡红院| 亚洲黄色av| 亚洲综合第一页| 久久亚洲图片| 99精品热视频| 久久久久免费| 国产精品久久久久av免费| 国产精品免费观看在线| 在线视频成人| 欧美伊久线香蕉线新在线| 美女视频黄免费的久久| 亚洲手机视频| 欧美精品国产精品| 精品白丝av| 欧美美女操人视频| 亚洲女ⅴideoshd黑人| 久久免费视频观看| 国产精品美女在线| 亚洲电影av| 久久综合久色欧美综合狠狠| 99国产精品久久久久久久成人热| 久久久久久夜| 欧美日韩一区二区在线观看| 亚洲级视频在线观看免费1级| 欧美一区二区私人影院日本| 一本久道久久久| 欧美日韩一卡| 亚洲视频在线观看视频| 欧美国内亚洲| 欧美日韩久久精品| 99riav久久精品riav| 亚洲人成绝费网站色www| 久久久综合精品| 91久久精品国产91久久性色tv | 亚洲三级免费观看| 欧美电影在线观看完整版| 亚洲高清久久| 久久狠狠婷婷| 午夜欧美精品| 久久久水蜜桃av免费网站| 新片速递亚洲合集欧美合集 | 久久人人爽人人爽爽久久| 国产精品久久久一本精品| 国产一区二区看久久| 亚洲高清不卡一区| 亚洲成色777777女色窝| 欧美激情精品久久久久久久变态| 国产精品看片资源| 久久精品国产精品| 欧美成人三级在线| 午夜精品久久久久久久99黑人| 欧美亚洲日本网站| 一区二区三区欧美| 久久久精品2019中文字幕神马| 日韩系列欧美系列| 久久三级视频| 在线观看亚洲精品| 欧美成人国产va精品日本一级| 欧美精品久久99| 蜜桃精品久久久久久久免费影院| 欧美黄色成人网| 欧美aaa级| 国产精品入口麻豆原神| 亚洲国产综合91精品麻豆| 国产在线拍偷自揄拍精品| 亚洲乱码久久| 一区二区三区 在线观看视| 欧美fxxxxxx另类| 免费不卡中文字幕视频| 国产精品网站在线| 久久一区精品| 国内伊人久久久久久网站视频| 在线视频中文亚洲| 香蕉久久夜色| 国产日产欧产精品推荐色| 亚洲性xxxx| 欧美电影免费观看高清完整版| 欧美专区福利在线| 国产亚洲一本大道中文在线| 99re这里只有精品6| 亚洲激情综合| 欧美黄色一区| 午夜天堂精品久久久久| 欧美主播一区二区三区美女 久久精品人 | 亚洲二区在线视频| 亚洲精品一区二区三区四区高清 | 麻豆成人小视频| 欧美精品日韩一区| 久久精品日韩欧美| 国产精品二区影院| 亚洲成色777777在线观看影院| 国产精品成人久久久久| 久久综合五月天婷婷伊人| 欧美午夜片在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美三级网址| 亚洲国产高清视频| 精品999在线播放| 亚洲一区在线免费| 在线亚洲电影| 欧美成人午夜剧场免费观看| 久久免费高清视频| 国产美女精品一区二区三区| 99re66热这里只有精品3直播| 亚洲国产三级在线| 久久夜色撩人精品| 免费精品视频| 精品av久久久久电影| 午夜精品成人在线| 性欧美大战久久久久久久免费观看 | 亚洲欧美视频一区| 亚洲自拍三区| 欧美网站在线| 亚洲午夜视频| 亚洲欧美一区二区三区极速播放 | 亚洲欧美大片| 欧美午夜不卡影院在线观看完整版免费| 亚洲第一精品福利| 亚洲激情专区| 欧美精品乱人伦久久久久久| 亚洲国产黄色片| 亚洲啪啪91| 欧美日本一区二区视频在线观看| 91久久在线| 国产精品99久久99久久久二8| 欧美日韩国产一中文字不卡| 亚洲美洲欧洲综合国产一区| 亚洲夜晚福利在线观看| 国产精品乱看| 久久国产精彩视频| 欧美高清视频在线播放| 日韩亚洲欧美成人一区| 国产精品成人在线观看| 午夜在线观看免费一区| 老司机aⅴ在线精品导航| 亚洲国产精品va在线观看黑人| 亚洲日韩视频| 亚洲视频在线免费观看| 国产精品丝袜久久久久久app| 午夜久久影院| 免费中文日韩| 艳女tv在线观看国产一区| 国产精品国产亚洲精品看不卡15 | 久久免费视频网站| 亚洲国产精品久久久久秋霞不卡 | 欧美日韩国产成人在线免费| 亚洲一区二区视频在线观看| 久久九九有精品国产23| 一区二区三区亚洲| 欧美连裤袜在线视频| 亚洲一区欧美| 欧美国产丝袜视频| 亚洲视频在线观看网站| 黄色一区二区三区| 欧美视频在线观看 亚洲欧| 先锋影音久久久| 亚洲国产欧美国产综合一区| 性高湖久久久久久久久| 亚洲国产精品一区二区第一页| 欧美日韩极品在线观看一区| 欧美一区成人| 日韩视频在线一区二区| 另类av导航| 亚欧成人精品| 一区二区三区免费观看| 1769国内精品视频在线播放| 国产精品视频| 欧美日韩精品久久| 欧美va天堂| 久久亚裔精品欧美| 欧美在线首页| 性欧美大战久久久久久久久| 在线视频精品一| 亚洲毛片av在线| 亚洲激情成人网| 欧美激情2020午夜免费观看| 久久久久久伊人| 欧美专区在线观看一区| 一区二区三区四区国产精品| 亚洲国产精品一区二区尤物区| 国产精品网站在线| 欧美三级午夜理伦三级中文幕 | 久久三级福利| 久久国产黑丝| 亚洲欧美综合一区|