遊戲的卷軸效果主要有兩種形式,一種是將遊戲分爲若干個場景的頁面卷軸,比如FC上的洛克人,當人物走到邊緣時,就會切換整個場景;一種就是魂鬥羅式的那種均勻平鋪的卷軸,這種捲動更爲平滑。因爲我要用在2.5D顯示引擎中,只能選擇第二種卷軸技術——均勻tile卷軸。
1. 卷軸要捲動哪些東西
首先要清楚捲動的是什麼東西,比如下面的一個KOK1的截圖:
這是一個典型的2.5D遊戲界面,這個界面上的所有元素全都是由位圖所組成的,但是不難分析出實際要捲動的只有地面的位圖。因爲傳送門和柱子、樹等等都是可以遮擋住人的,即渲染順序是:
(1) 根據世界座標捲動的地面貼圖
(2) 玩家單位、建築、環境元素單位以從上至下的順序渲染,這樣就會產生2.5D效果,即近景遮擋住遠景。
2. 均勻平鋪顯示引擎的設計與實現
由上圖的地板不難看出,其實這些地面是由一小塊一小塊拼接而成的,這樣可以使位圖得以重用,就像紅警95的地圖編輯器一樣,一個地形可以在地圖中反覆出現。所以我們實際要有一個位圖文件來存放這些一塊一塊的地板,比如我隨便畫了這個(第一個是我自己用畫筆畫的,後面兩個是截圖截的,效果都一般,可見優秀美工的重要性),有三塊86*40的地板:
然後在程序中,我們需要創建一個顯示錶面的數組來分別存放這三個地板。
接着,定義一個int數組來存放地圖中地形的索引,比如我打算要創建一個3×3塊地板的地圖,則:
這樣這個地圖等於是第一行都是第0塊地板,第二行都是第1塊地板,第三行都是第2塊地板。
現在就要創建世界表面,把世界加載到一個單獨的大表面上:
現在所有的準備工作都做好了,就要在顯示器顯示的每一幀,根據視窗在世界中的座標來Blt相關的區域到離屏表面,並且根據玩家的輸入來調整視窗在世界中的座標:
3. 放上一個截圖,是完成的效果。