久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

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

Qd6O1W@*J.rK'j1一 游 戲引擎的原理BSD愛好者樂園3gU9VT5p$MLN

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

;xBhr5^^jO4T1二 角 色扮演游戲的制作

,F%?:mX r ]t1

;W3u'O+_{I@1gF1  一 個完整的角色扮演游戲的制作從大的分工來說可以分為:策劃,,程序設(shè)計,,美工,音樂制作以及項目管理,,后期的測試等,。
Y7p7evSV9m/S v3}1  策劃主要任務(wù)是設(shè)計游戲的劇情,類型以及 模式等,,并分析游戲的復(fù)雜性有多大,,內(nèi)容有多少,策劃的進(jìn)度要多快等因素,。
Lg8R1i yr4j1  程序設(shè)計的任務(wù)是用某種編程語言來完成游戲的設(shè)計,,并與策劃配合,,達(dá)到預(yù)期的目的。
1j y7?rZE@1  美工主要是根據(jù)游戲的時代背景與主題設(shè)計游戲的場景及各種角色的圖象,。
+n K:NV'uX$Q&M9\1  音樂制作是根據(jù)游戲的劇情和背景制作 游戲的音樂與音效,。
#p+p/cY~8l+r.Y1  項目管理 主要是控制游戲制作的進(jìn)程,充分利用現(xiàn)有的資源(人員,,資金,,設(shè)備等),以達(dá)到用盡量少的資金實現(xiàn)最大的收益,。BSD愛好者樂園"uH V0N!G9hV\;n J
  后期的測試也是非常重要的一個環(huán)節(jié),,對于一個幾十人花費(fèi)幾個月甚至是幾年時間制作的游戲,測試往往能找到許多問題,,只有改進(jìn) 程序才能確保游戲的安全發(fā)行,。
5GppN&D yi1  由于文章主要是講解游戲程序的制作的,所以策劃,,美工,,音樂制作等方面請讀者參考其它文章,下面我就講講游戲程序的設(shè)計,。

2L-Y7U)Y$r e+C1BSD愛好者樂園KKA4{Jm [ C"o

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

Z9kGJ-vj j1BSD愛好者樂園w[aO(H+m{

1. 件開發(fā)工具BSD愛好者樂園n?rs1z X)a

BSD愛好者樂園2K-QXh;]*z+H6Y E

  游戲程序開發(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ù)?a href="javascript:;" oncg="javascript:tagshow(event, '%e5%86%85%e5%ad%98');" target="_self">內(nèi)存管理, 在堆棧上良好的分配處理,,生成代碼的體積小,,穩(wěn)定性高的優(yōu)點,所以VC++就成為目前游戲的主流開發(fā)工具,。BSD愛好者樂園f$g Knzz?QUg

BSD愛好者樂園6M B C8a9A?W+lu

2.DirectX組件的知識

:c.B4bQ.F R1BSD愛好者樂園H1l@|V

  談到Windows系統(tǒng)下的游戲開發(fā),, 我們就要說一下微軟的DirectX SDK。
8]0b4Lbs`1 Windows系統(tǒng)有一個主要優(yōu)點是應(yīng)用程序和設(shè)備之間的獨立性,。然而應(yīng)用程序的設(shè)備無關(guān)性是通過犧牲部分速度和效率的到的,,Windows在硬件和軟 件間添加了中間抽象層,,通過這些中間層我們的應(yīng)用程序才能在不同的硬件上游刃有余。但是,,我們因此而不能完全利用硬件的特征來獲取最大限度的運(yùn)算和顯示速 度,。這一點在編寫Windows游戲時是致命的,DirectX便是為解決這個問題而設(shè)計的,。DirectX由快速的底層庫組成并且沒有給游戲設(shè)計添加過 多的約束。微軟的DirectX軟件開發(fā)工具包(SDK)提供了一套優(yōu)秀的應(yīng)用程序編程接口(APIs),,這個編程接口可以提供給你開發(fā)高質(zhì)量,、實時的應(yīng) 用程序所需要的各種資源。
`\*Itv1  DirectX 的6個組件分別是:BSD愛好者樂園4U`?cJt
DirectDraw: 使用頁面切換的方法實現(xiàn)動畫,,它不僅可以訪問系統(tǒng)內(nèi)存,,還可以訪問顯示內(nèi)存。
r9Z*a%_ KQX4f1    Direct3D: 提供了3D硬件接口,。BSD愛 好者樂園G0G X2oeq,k
    DirectSound: 立體聲和3D聲音效果,,同時管理聲卡的內(nèi)存。BSD愛好者樂園Kn6I UE'o T
    DirectPlay: 支持開發(fā)多人網(wǎng)絡(luò)游戲,,并能處理游戲中網(wǎng)絡(luò)之間的通信問題,。
c)__*j!}W?Q?z]m b1    DirectInput: 為大量 的設(shè)備提供輸入支持。
'N(Wx3pI#i?L)c1 DirectSetup: 自動安裝DirectX驅(qū)動程序,。BSD愛好者樂園g:S.w \Q[B*b
  隨著DirectX版本的提高,,還增加了音樂播放的DirectMusic。BSD愛好者樂園,v(u!E@t p0oM I0B\

BSD愛好者樂園%@5J{tv7w?|

3.AlphaBlend 技 術(shù)BSD愛好者樂園|y/b#Y@3v_ rT{

},Q0v]f1  現(xiàn)在許多游戲為了達(dá)到光影或圖象的透明效果都會采用 AlphaBlend 技術(shù),。所謂AlphaBlend技術(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混合公式如下:BSD愛好者樂園F1A Mnm;@-R7m x
    R(C)=alpha*R(B)+(1-alpha)*R(A)BSD愛好者樂園kx:SC#U&y.?
G(C)=alpha*G(B)+(1-alpha)*G(A)
'x:ex:DD3r#G/r1 B(C)=alpha*B(B)+(1-alpha)*B(A)
O$sI|'C1 R(x)、G(x),、B(x)分別指顏色x的RGB分量原色值,。從上面的公式可以知道,,Alpha其實是一個決定混合透明度的數(shù)值。應(yīng)用Alpha混合 技術(shù),,可以實現(xiàn)游戲中的許多特效,,比如火光、煙霧,、陰影,、動態(tài)光源等半透明效果。

0_?}2L&GiS1BSD愛好者樂園*S6Uf S!wd-L

4.A*算法BSD愛好者樂園@JU A*Q?v`J

p{ i^+z;~8E L&z1  在許多游戲中要用鼠標(biāo)控制人物運(yùn)動,, 而且讓人物從目前的位置走到目標(biāo)位置應(yīng)該走最短的路徑,。這就要用到最短路徑搜索算法即A*算法了。
T;|tsG FI+@Y1  A*算法實際是一種啟發(fā)式搜索,,所謂啟發(fā)式搜 索,,就是利用一個估價函數(shù)評估每 次的的決策的價值,決定先嘗試哪一種方案,。如果一個估價函數(shù)可以找出最短的路徑,,我們稱之為可采納性。A*算法是一個可采納的最好優(yōu)先算法,。A*算法的估 價函數(shù)可表示為:
Pu;`~&M4ev q1    f(n) = g(n) + h(n)
ihp9g)^(N}\x$H1 這里,,f(n)是節(jié)點n的估價函數(shù),g(n)是起點到終點的最短路徑值,,h(n)是n到目標(biāo)的最斷路經(jīng)的啟發(fā)值,。由于A*算法比較復(fù)雜,限于篇幅,,在此 簡單介紹一下,,具體理論朋友們可以看人工智能方面的書籍了解詳細(xì)的情況。BSD愛好者樂園 /R,M Lcj:khk6Z

IZ^}?Y/|^F1 其它技術(shù)還有粒子系統(tǒng),,音頻與視頻的調(diào) 用,,圖象文件的格式 與信息存儲等,大家可以在學(xué)好DirectX的基礎(chǔ)上逐漸學(xué)習(xí)更多的技術(shù),。BSD愛好者樂 園,_DT9h:d!C5jMH

B3Jk3^T-N T1(二)游戲的具體制作BSD愛好者樂園/y~q6[n9V

sLq FI$qf11.地圖編輯器的制作BSD愛好者樂園M A:Y,^TVL

BSD愛好者樂園a4GTsy| _

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

@6WgM1z${ Ru}1

W2x+LuQ1MapData[X][Y]; //地圖數(shù)據(jù),,X表示地圖寬 度,,Y表示地圖高度BSD愛好者樂園X_,ZdZp
Picture[num]; // 道具的圖片,,num表示道具的總數(shù)BSD愛好者樂園n?2UB:MIa
void MakeBackGround() // 生成場景函數(shù)BSD愛好者樂園Z$\&^1t0e4G!w
{
o$eTa(`W1w1 int n;BSD愛好者樂園4a!t.]R [`~ID
for( int i=0; i<Y; i++) //共Y行BSD愛好者樂園 2C8d2n1f Aeg1f
 for( int j=0; j<X; j++) //共X列
i!@]3e+bYH o v#z1 {
$x"B)n;f1|/Z[1 n=MapData[ i ][ j ]; //取得該位置的道具編號
ywL/Y$a7~1 Draw( j*32, i*32, Picture[n]); //在此位置(j*32,i*32)畫道具
X^4d~ A U0v0kd1 }
9HZ m"E2o.FF O9\)s1}

0l$@8r tU4?\5j1BSD愛好者樂園U?T:Q's i5M(e"Uki$P

2.游戲的模塊的 劃分BSD愛好者樂園}W-y6ze-a-h(E

U/Arj??1  游戲按功能分為:消息處理系統(tǒng),、場景顯示及行走系統(tǒng)、打斗系 統(tǒng)三大主要部分,。其中又以消息處理系統(tǒng)為核心模塊,,其余部分緊緊圍繞它運(yùn)行。BSD愛好者樂 園}{ UGyc&G)@:[)N9?D

"X:d-x7R$H"o-E3`1一: 消息處理系統(tǒng)BSD愛好者樂園T4K0w@8p:R+S1T(DB XJ

3o@ O^ Ga1  消息處理系統(tǒng)是游戲的核心部分,。游戲用到的消息處理系統(tǒng)先等待消息,,然后根據(jù)收到的消息轉(zhuǎn)到相應(yīng)的函數(shù)進(jìn)行處理。比如:主角碰 到敵人后,,我們就讓程序產(chǎn)生‘打斗消息’,,消息處理系統(tǒng)收到這個消息后就會馬上轉(zhuǎn)到打斗模塊中去。消息處理的大體框架如下:BSD愛好者樂園Wr)?k&D3W _Z1V ck

BSD愛好者樂園&A/Adkj0m~;iu

//定義程序中要 用到的變量BSD愛好者樂園3Q!pi$u1?:i JE
DWORD Message; // 消息變量BSD愛好者樂園E2Hl;U |rtNN-@
WinMain() // 進(jìn)入程序BSD愛好者樂園5lo0f`%w X"Q
{BSD愛好者樂園,i9uZ C/|8g$Bu
初始化主窗口;
-\0O?6c'N?}1 初始化 DirectDraw環(huán)境,,并調(diào)入程序需要的圖形,、地圖數(shù)據(jù);BSD愛好者樂園 e0f k?EZR
 while( 1 ) //消息循環(huán)BSD愛好者樂 園 xWbIq5C%bt']
 {BSD愛好者樂園2l3B KXlR
  switch( Message )BSD愛好者 樂園(e2b5nBC"h$i4U8[
  {BSD愛好者樂 園:BD/tA's"x
   case 行走消息: 行走模塊();
y;O,_Y6k%@R.k:{'t;s1   case 打斗消息: 打斗模塊();
)L9E7ZxC"R,]V3a$X~1   case 事件消息: 事件模塊 ();
t"a$g.s jW1  }
r?X!z8iPB3\1 }
of&VEn!ze)G1}

.U Y?RQ*bZs:bf1

xk*FE?L7C ?1二: 場景顯示及行走系統(tǒng)BSD愛好者樂園#Qs'C!t/V$M7T+v

BSD愛好者樂園e%G1?;p-Mv~M t&Mh

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

G$V w B3|M"f s1(一)背景顯示BSD愛好者樂園 Z:N-G0iV]#}"\
  程序運(yùn)行后,先讀取前面地 圖編輯器制作的場景所需要的圖塊的排列順序,,按照排列順序?qū)D象拼成一個完整的場景,,一般做法是:在內(nèi)存中開辟一到兩個屏幕緩存區(qū),事先把即將顯示的圖象 數(shù)據(jù)準(zhǔn)備在緩存區(qū)內(nèi),,然后一次性搬家:把它們傳送到真正的屏幕緩沖區(qū)內(nèi),。
l#uo'fD'_1 游戲用到的圖片則事先制作好并存于另外的圖形文件中。地圖編輯器制作的場景文件僅僅是對應(yīng)的數(shù)據(jù),,而不是真正的圖片,。在游戲中生成場景就是地圖編輯的逆 過程,一個是根據(jù)場景生成數(shù)據(jù),,而另一個是根據(jù)數(shù)據(jù)生成場景,。BSD愛好者樂園@,WS mP k

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

BSD愛好者樂園}&@,rqIv

(三) 事件發(fā)生BSD愛好者樂園7@/?4B%ez{
  事件發(fā)生原理 就是把相應(yīng)事件的序號存儲在地圖的某些格子中,,當(dāng)主角一踏入這個格子就會觸發(fā)對應(yīng)事件。例如:在游戲開始時,,主角是在他的家里,。他要是想出去的話,就需要 執(zhí)行場景切換這個處理函數(shù),。我們假定該事件的編號為001,,那么在地圖上把家門外路口處的格子值設(shè)為001。這樣主角走到路口時,,編號為001的場景切換 函數(shù)就會被觸發(fā),,于是主角便到了下一個場景中。程序具體如下:

m7]5iw'P1

/Q r l6\|2hN$A(f1void MessageLoop( int Msg ) // 消息循環(huán)BSD愛好者樂園T$G:noSuxb
{BSD愛好者樂園p k&I*P$K7Ge;h
 switch( Msg )BSD 愛好者樂園 Y rG6f(d9rG`
 {BSD愛好者樂園8]r*?,V qNG]
  char AddressName[16]; //數(shù)組AddressName[16]用來存儲主角所在地點的 名稱BSD愛好者樂園2}c2w/o)Tx;f
case ADDRESS == 001: // 由ADDRESS的值決定場景值(出門)BSD 愛好者樂園 cc2ri:`
  ScreenX=12; ScreenY=0; //初始化游戲背景位置
8\fB&f)ZP!m-QE1 Hero.x=360; Hero.y=80;//主角坐標(biāo)BSD愛好者樂園k:[,f ^+v:pBBJ [
  Move();//主角移動函數(shù)BSD愛好者樂園(lf%M g@ Vna.x
  //以下程序用來顯示主角所在地點
(U(t!M%c*lmX)L1 sprintf(AddressName,"下一幅游戲場景的名稱");
wSNo WZK,}1 PrintText(lpDDSPrimary, 280, 330,AddressName , #ffffff);//在屏幕上顯 示出場景的名稱BSD愛好者樂園 CQpG%zs
  break;
-C]4^-nJ9`c1 }
w1M:@dq|s G w1}BSD愛好者樂園Gy/C9B0h,E9m

H(A`WkQ"dW1三:打斗系統(tǒng)BSD愛好者樂園/Y9V6QreNca

BSD愛好者樂園{u6rb)fw"M

  絕大多數(shù)的RPG都是有戰(zhàn)斗存在 的,,因此,,打斗系統(tǒng)就成為RPG系統(tǒng)中很重要的一環(huán)。有不少RPG游戲采用回合制打斗方式,,因為實現(xiàn)起來較為簡單。和打斗緊密相關(guān)的是升級,,通常 在一場戰(zhàn)斗結(jié)束后,,主角的經(jīng)驗值都會增加。而當(dāng)經(jīng)驗值到達(dá)一定程度時,,角色就升級了,。BSD 愛好者樂園 \,E;?q4Xr
  上面我簡要的介紹了角色扮演游戲的制作,由于寫這篇文章的目的是讓讀者對角色扮演游戲的制 作有一個基本的了解,,所以讀者朋友們可以研究相關(guān)資料,。BSD愛好者樂園 Y*g9sT'B1vU

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多