【簡介:】一個簡單的RPG游戲 首先,要制作一個RPG的游戲。所需要涉及到的方面,有以下幾個: 1. 使用鍵盤控制精靈。2. 由于精靈有四個走動方向,而每個方向又應(yīng)該有幾幀動畫(這里定為二幀)???
一個簡單的RPG游戲 首先,要制作一個RPG的游戲。所需要涉及到的方面,有以下幾個: 1. 使用鍵盤控制精靈。2. 由于精靈有四個走動方向,而每個方向又應(yīng)該有幾幀動畫(這里定為二幀)??紤]到每個機(jī)器的配置不一樣(CPU和顯卡不同)。 所以幀與幀之間必須有延遲。 3. 當(dāng)精靈在我們所定的迷宮里行走時,當(dāng)它碰到"障礙"時,應(yīng)該無法繼續(xù)前進(jìn)。 4. 在游戲里,還應(yīng)該有"壞精靈"。在我這個游戲里,其表現(xiàn)狀態(tài)為"追趕受控的精靈"。(目前,只使用了簡單的追逐算法,所以"壞精靈"有時會卡住。在將來的版本里將考慮使用A*算法。) 5. 精靈的移動不應(yīng)該只局限于屏幕的高寬,這時就需要卷軸了。 以下是具體解決辦法:(對應(yīng)上面4個問題)1. 只需使用WINDOWS消息WM_KEYDOWN即可。在DX環(huán)境下使用DirectInput來操作鍵盤。2. 為每一張精靈位圖分別分配一塊內(nèi)存保存其圖像信息。這樣每一張位圖對應(yīng)一個指針。(這里我使用一數(shù)組實現(xiàn),其大小由具體的圖像數(shù)量決定)具體訪問時,我又指定了一個指向此數(shù)組的指針,在精靈運動時,只需操作指針+=偏移量即可,這樣在繪制時,只需繪制此指針的值就行了。在這里,我設(shè)定受控精靈的運動偏移量為2(像素)。接著定義一int 數(shù),初始其為0,在每次精靈的有效運動(這里只是指UP、DOWN、LEFT、RIGHT四個方向操作,而且每次只允許一個有效。要不然就會當(dāng)用戶同時按下以上四個方向任何兩個時,出現(xiàn)此精靈斜向運動,因為此時它的位置坐標(biāo)x和y可能同時發(fā)生了改變)時遞加。規(guī)定一個常量值,在上個int整數(shù)等于此常量時,令其清零。這整個操作的意義為,當(dāng)此int數(shù)等于常量值時,此時精靈狀態(tài)為當(dāng)前方向的第一張動畫;當(dāng)?shù)扔诔A恐?2時,為第二張。這樣就產(chǎn)生了動畫效果。再談?wù)勓訒r,只需在WM_CREATE消息時定義一個TIMER。然后在每次設(shè)置指針偏移時,首先判斷TIMER是否有效即可。 例: 首先定義TIMER,再定義一變量state = 0 (其變化為:當(dāng)TIMER發(fā)生時,state=1-state ) 第一張動畫if(時間延時) if(遞加的變量==常量值)指向精靈數(shù)組的指針=精靈數(shù)組+偏移量; 第二張動畫 if(!時間延時) if(遞加的變量==常量值*2)指向精靈數(shù)組的指針=精靈數(shù)組+偏移量; 3. 用一單色位圖記錄地圖信息。其中白色為可通行,黑色為不可行。 然后繪制時由此位圖生成用戶可視地圖。并用一全局二維數(shù)組記錄此地圖。然后每次精靈移動時,其實是在此二維數(shù)組里移動,在其移動前進(jìn)行判斷下一步是否可行。具體的判斷方法由精靈的坐標(biāo)來換算出其實際在我們的地圖數(shù)組中的位置,然后取此位置值,判斷此處是否可以通行。4. 至于"壞精靈"的跟蹤算法。目前只是簡單的遞加和遞減,沒有必要再進(jìn)一步闡述。將來使用A*算法,再寫出具體思想吧。 5. 為了表現(xiàn)游戲的世界觀,有很多時候精靈是在一個很大的地圖上行走,其大小會大于我們所見的屏幕大小,這時就要用到卷軸。 現(xiàn)在已知有兩個方法,簡單的是擁有或創(chuàng)建一個所需的大地圖,其具體表現(xiàn)形式可能是BMP位圖,在DirectDraw里的概念叫“表面”。方法是,每當(dāng)操作者控制精靈移動時,只需改變精靈的朝向和狀態(tài),并不改變其實際坐標(biāo)。而真正發(fā)生變化的,是操作者所看到的屏幕。也就是背景移動而在中心的精靈不動,這樣會給人以錯覺,覺得是精靈在移動。而我們所要做的,就是計算一個矩形,這個矩形的范圍也就是操作者所能看到的。它實際上是整個地圖中的一部分。BMP位圖有一個操作函數(shù)叫做StretchBlt和DirectDraw中表面的Blt方法類似,都是從源位圖拷貝矩形區(qū)域到目標(biāo)位圖中去。利用它們的功能和我們先前計算出來的矩形數(shù)據(jù),就可以實現(xiàn)了!具體來說:無卷軸時是精靈本身移動,地圖不動;而卷軸的時候,是整個屏幕(即我們所要計算它實際在地圖中的矩形位置)在地圖里移動(注:其移動是與精靈相反的),在地圖卷到盡頭時,精靈開始無卷軸時的移動,其它時候不動。------------這里有個網(wǎng)站,RPG制作大師,希望對你有點幫助 http://www.66rpg.com