實現一個均勻Tile的卷軸顯示引擎

遊戲的卷軸效果主要有兩種形式,一種是將遊戲分爲若干個場景的頁面卷軸,比如FC上的洛克人,當人物走到邊緣時,就會切換整個場景;一種就是魂鬥羅式的那種均勻平鋪的卷軸,這種捲動更爲平滑。因爲我要用在2.5D顯示引擎中,只能選擇第二種卷軸技術——均勻tile卷軸。

 

1. 卷軸要捲動哪些東西

首先要清楚捲動的是什麼東西,比如下面的一個KOK1的截圖:

傳送門

這是一個典型的2.5D遊戲界面,這個界面上的所有元素全都是由位圖所組成的,但是不難分析出實際要捲動的只有地面的位圖。因爲傳送門和柱子、樹等等都是可以遮擋住人的,即渲染順序是:

(1) 根據世界座標捲動的地面貼圖

(2) 玩家單位、建築、環境元素單位以從上至下的順序渲染,這樣就會產生2.5D效果,即近景遮擋住遠景。

 

2. 均勻平鋪顯示引擎的設計與實現

由上圖的地板不難看出,其實這些地面是由一小塊一小塊拼接而成的,這樣可以使位圖得以重用,就像紅警95的地圖編輯器一樣,一個地形可以在地圖中反覆出現。所以我們實際要有一個位圖文件來存放這些一塊一塊的地板,比如我隨便畫了這個(第一個是我自己用畫筆畫的,後面兩個是截圖截的,效果都一般,可見優秀美工的重要性),有三塊86*40的地板:

地板

然後在程序中,我們需要創建一個顯示錶面的數組來分別存放這三個地板。

接着,定義一個int數組來存放地圖中地形的索引,比如我打算要創建一個3×3塊地板的地圖,則:

這樣這個地圖等於是第一行都是第0塊地板,第二行都是第1塊地板,第三行都是第2塊地板。

 

現在就要創建世界表面,把世界加載到一個單獨的大表面上:

 

現在所有的準備工作都做好了,就要在顯示器顯示的每一幀,根據視窗在世界中的座標來Blt相關的區域到離屏表面,並且根據玩家的輸入來調整視窗在世界中的座標:

 

3. 放上一個截圖,是完成的效果。

卷軸demo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章