製作手札 RPG是怎樣做成的 三

2021-03-31 13:36:19 字數 2874 閱讀 5415

三月二十九日

至四月一日:場景顯示及行走系統

如果說『訊息處理』是整個程式的核心!那麼『場景顯示及行走系統』就是整個遊戲的核心。因為作為rpg遊戲,其所有事件的發生幾乎都是和場景有關,例如:不同的地方會碰到不同的敵人、與不同的人對話得知不同的事情、在特定的地點才能找到寶物等等,所有的這一切都說明『場景』在乙個rpg遊戲中的重要地位。鑑於這部分的重要性,我們可再將它劃分為:背景顯示、行走事件發生

三個子模組,分別處理各自的功能。要注意這可是乙個rpg遊戲製作的難點哦!下面進行具體分析。

(一)背景顯示

通常rpg遊戲的場景是採用拼圖方式生成的(如《仙劍奇俠傳》、《金庸群俠傳》等),拼圖的好處是節省記憶體消耗、執行速度快和容易實現滾屏操作等。同時也減輕了美工的工作量,這點對我尤其重要j

我們將計算機螢幕當成拼板,先把螢幕解析度設為640x480x256色,然後用32x32大小的方格來劃分它,這樣整個螢幕就分成了15行乘20列的小格仔(如圖3所示),這就是我們用來表現遊戲的舞台了。

舞台搭建好之後,就可以在上面放我們需要的『道具』,如:樹木、石頭、房子等等,將它們的大小都統一定為32x32,這樣乙個格仔正好可以放下乙個『道具』;不過你一定會問:難道所有的道具都一樣大嗎?當然不一樣,如果那樣就太不真實了,我們把32x32作為最小的道具單位,比較大的道具可以佔多個格仔。如:一座山的大小為96x64,那麼用3x2的格仔來放置它就可以了。要注意的是所有道具的長和寬都必須是32的整數倍,這些需要你事先將它們處理好。

請記住每個道具都要有它唯一的編號(如:樹木=100、石頭=101、房子=102、大山的編號是200~205共6個,因為它佔6個格仔)。這樣當場景布置好後,我們的地圖資料也就自然而然的產生了,如圖4:

以上就是場景編輯器的原理了(我在遊戲製作前先寫了乙個場景編輯器,用來生成遊戲中要用到的場景。場景編輯器附帶在程式之中:mapedit.exe),用場景編輯器設計好場景後先存在磁碟中,以便在遊戲中呼叫。注意:道具的應事先製作好並存於另外的圖形檔案中。這裡需要儲存的僅僅是對應的資料,而不是真正的。

搞清楚原理之後,要在遊戲中生成場景就非常簡單了,其實就是場景編輯的逆過程,乙個是根據場景生成資料,而另乙個是根據資料生成場景。我的演算法如下:

mapdata[20][15]; //事先用場景編輯器生成的地圖資料

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

void makebackground() //

生成場景函式 }

一切就是這麼簡單,看著像圖4一般的遊戲場景,你的心情是不是非常激動?我想你一定和我一樣吧!不過可別先忙著高興,下面的內容會更精彩的。

(二)行走

舞台搭建好了,終於輪到我們的主角出場了(注意了!燈光、奏樂……),要讓小飛刀在場景中自由自在的行走可不是一件容易的事,算算一共有上、下、左、右四個行走方向,每個方向3幅圖(站立、邁左腿、邁右腿),所以要事先做好12幅圖,如下:

遊戲中一定要將的背景設為透明,這樣在畫人物的時候就不會覆蓋上背景色了(這一技術在directdraw中非常容易實現,只要將背景色定為colorkey就行了)。

其實讓角色在場景上移動並不困難,只須改變他的螢幕座標(x,y)就可以了,但是,一般的地圖都比螢幕大的多,如果僅僅改變螢幕座標的話,小飛刀不是就會走到螢幕外面去了嗎?所以我們要讓主角位置不動,而使場景移動。你是否注意到了《仙劍》中李逍遙一直就在螢幕的正中間?他行走時場景向著相反的方向移動。對,這就是滾屏技術的效果。

地圖是一張很大的畫,而螢幕就是我們用來觀察的視窗。利用我們先前講的拼圖方法就可以很容易的實現滾屏操作。只須引入乙個相對座標(sx,sy),表示當前螢幕左上角相對於整張地圖左上角的位置。那麼,生成場景時加入這個相對座標就可以了,看看改進後的演算法:

//場景生成演算法

int w=100,h=80; //假如地圖的大小為100*80個格仔

mapdata[w][h]; //事先用場景編輯器生成的地圖資料

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

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

怎麼樣?變化不大但是卻很有效,這也正是遊戲程式設計的魅力!這時要讓角色移動就只須往相反的方向重繪背景就可以了,而角色一直保持在螢幕的正中間,需要做的工作只是根據行走方向和步伐不停變換而已。

還要注意的是行走時的障礙物判斷,因為有一些道具是不可跨越的,比如樹木、房屋等。那麼我們在行走時,應該先計算出下一步是否會碰到障礙,如果有障礙就取消移動。在這個程式中就是判斷下乙個格仔中資料是否為0,因為0代表地面。

好了,到現在為止,一套完整的行走系統就基本上出來了。執行一下,看看自己做的rpg遊戲,感覺也不比別人的差嘛!看來只要是用了心,就會有好的心情!

(三)事件發生

不要忘了,這部分還有乙個非常重要的功能,那就是事件發生了。其實原理非常簡單,就是把相應事件的編號放在地圖的某些格仔中,那麼,當主角一踏入這個格仔就會觸發對應事件。例如:

我們設定遊戲一開始時,小飛刀是在他的房間裡。那麼他要是想出去的話,就需要執行場景切換這個處理函式,但是應該在什麼時候執行呢?這就需要觸發一定的事件了。我們假定該事件的編號為1000,那麼在地圖上把門口處的格仔值設為1000。這樣無論小飛刀在房間裡怎麼走動都沒有關係,而一旦他走到門口時,編號為1000的場景切換函式就會被觸發,於是小飛刀便從屋內來到了屋外。

類似的事件還有很多,踩到陷阱、碰到敵人、發現寶物等等……都可以用同樣的方法進行處理,所不同的只是呼叫的函式。

ok!最艱苦的時段終於熬過去了,現在就讓我們以無比輕鬆的心情來回顧一下這幾天的工作成果吧!

首先,我們用拼圖的方式建立了遊戲的場景顯示系統。

然後,以滾屏技術實現了角色在場景上的移動。

最後,了解了事件發生的一般原理。

到目前為止,我們已經擁有了乙個可以實實在在執行、真真切切感受的rpg

了。不過現在的她才剛剛學會走路,還需要你用大量的營養來澆灌。這樣就可以使她迅速成長,變的更加美麗動人!

製作手札 RPG是怎樣做成的 一

自從我們的第乙個正式電腦遊戲 衝擊 完成之後,已經有很長一段時間沒有碰這方面的東西了,不過在我心中好象一直在期盼著什麼東西 目睹著當今五彩繽紛的遊戲世界和國產遊戲的尷尬境地,我忽然有一種莫名的衝動,做遊戲的衝動。也許是以前有過這方面的經驗或者說是教訓吧!我知道應該先讓自己冷靜下來,仔細的想一想我到底...

網路是怎樣連線的(三)

在傳輸中包與包之間沒有關聯 網線越長,頻率越高,損失越大 損失會使波形變形,無法分辨0 1,造成錯誤 雙絞線抑制雜訊 兩種維護方式 收到包時,將傳送方的埠號與mac位址加入位址表 將一段時間不使用的過時記錄刪除 這是為了防止裝置移動而改變埠 若發生錯誤,重啟交換機即可 講了兩個 交換機發現包要返回源...

網路是怎樣連線的(三)

3.1 訊號在網線和集線器中傳輸 3.1.1 每個包都是獨立傳輸的 在傳輸中包與包之間沒有關聯 3.1.2 防止網線中的訊號衰減很重要 網線越長,頻率越高,損失越大 損失會使波形變形,無法分辨0 1,造成錯誤 3.1.3 雙絞 是為了抑制雜訊 雙絞線抑制雜訊 3.1.4集線器將訊號發往所有線路 乙太...