2D斜視角遊戲的繪製次序總結(雲風的blog)

2021-06-20 04:06:27 字數 923 閱讀 8610

斜45度角遊戲, 為了節省貼圖資源。可用正方形儲存地表貼圖,用的時候在旋轉45度,再scale(1,0.5)。

所謂類似 coc 這樣的斜視角引擎,在英文社群中叫作 isometric tileset engine。它在早期計算資源匱乏的年代用的很多,後來記憶體不是問題了後,就很少有人用了。由於沒有 z-buffer ,這種引擎的繪製次序其實很講究。

如果兩個物件 a 和 b ,a 不在 b 的扇面內,b 也不在 a 的扇面內,就認為 a 和 b 無關。

乙個簡單的方法是,利用所有物件之間的關係做一次氣泡排序。一遍掃瞄出乙個物件,它在所有物件之前,或是跟其它物件無關,把它放在第一位繪製;然後依次處理剩下的物件即可。這個方法很好理解,但是時間複雜度偏高。

另一種方法不需要排序,但是實現略微複雜一些。為了好描述,把地圖旋轉 45 度,變成正方形的方便解說。假如有如下場景。

從第一行開始從左到右掃瞄,直到碰到第乙個東西 c 。

檢查 c 的左邊是否全部被觸碰過,如果沒有,就把 c 壓入乙個臨時堆疊,然後另起一行重複前面的過程。但不要掃瞄已掃瞄過的區域。

如果 c 的左邊全部被觸碰過,則可以繪製 c ,然後從 c 的右邊繼續這個過程。

這個堆疊的最大深度不會超過總行數。而掃瞄永遠是從左向右的,只需要乙個和行數相同的陣列就可以儲存下已經掃瞄過的位置。這個演算法的時間複雜度以及空間複雜度都是 o(n) 的。

看完這個繪製過程,就知道,如果需要把場景正確的出來,需要知道地圖上有哪些東西,它們是什麼,它們在**,它們有多大。其它的資訊是不必要的。

為這個需求設計乙個簡單的資料結構,服務於繪製流程以及後面會提到的生成尋路圖。

管理繪製次序只有乙個 api ,就是從乙個座標取下乙個需要繪製的物件所在的座標。這個 api 所需要用到的資料,只要是乙個 2d 陣列,陣列上的每個元素可以表明所在位置的建築的尺寸就可以了。coc 裡都是正方型建築,只需要乙個邊長就可以記錄大小。

js 繪製2D機櫃(一)2D機櫃的基本繪製

今天被領導要求用js繪製2d機櫃用於向客戶展示客戶資產以及管理裝置,雖然我是後端,既然被分配到這個任務那就得做好。繪製的第一步當然是繪製機櫃框框,這個很簡單,寫個div然後將邊框設定下就好了 parentblock 這裡將背景設定成灰色顯得真實些 為了辨別機櫃,這裡在機櫃上面再加乙個機櫃title ...

2d的公式 繪製二體2D執行軌跡

本來想要繪製三體的3d軌跡,但是一開始難度有點大,先從最簡單的開始,二體類似地月系統 首先來定義乙個繪製函式 因為是乙個執行軌跡,所以時間就是必要因素 解決整體漂移問題 萬有引力計算函式 萬有引力公式為前半部分,後半部分其實是乙個單位向量,所以,計算結果為向量,這裡的萬有引力常數並不是真實的數值,這...

2D遊戲中的技能特效

在我們的2d圖形遊戲中不可缺少大量的光影 技能特效,像diablo ii中的魔法效果的實現,幸好我們擁有強大的cpu來為我們實現alpha混合與色彩飽和混合,接下來讓我們來討論一下如何用這些方法來實現我們遊戲中所需要的技能特效。一 alpha混合特效 alpha混合可以讓我們讓我們將一張圖象按一定程...