2D遊戲中經常使用人物的半透明效果

2021-06-09 00:19:23 字數 1444 閱讀 5771

通常我們在2d遊戲中經常使用人物的半透明效果來表示人物被建築物所遮擋,這種效果做法不但畫面效果較佳,而且能讓玩家更好的了解自己所控制玩家當前位置,才不會被物件所遮擋,茫然失去方向。這裡,我們就是來講講簡單的處理方法。

我們的遊戲場景一般由地表層、建築(遮擋)層、人物層來進行管理,其中建築和人物層必須經過排序處理來確定繪製的先後次序,這就產生了人物與建築、建築與人物的一種相互遮擋關係;我們來看看我們所需要的資源:

地表層圖象

人物圖象

遮擋物圖象

我們現在要做的就是把這3者有機的結合起來,組成我們的遊戲畫面。

地表層通常不存在遮擋關係,因而一般都直接進行繪製,不需要多做處理,然後就是人物與物件遮擋的關係處理,一般情況下,我們都會得出這樣乙個結果:

我們把最基本的東西實現了,但我們要如何實現人物部分的透明呢?這時候我們用乙個很簡單的技巧就能夠實現,只要在人物原來的位置再繪製一邊alpha混合的人物圖象,這樣就能得到我們所需要的效果:

我們馬上就可以看到人物的腦袋已經半透明的,但身體部分還保持原來的色彩,這是個很簡單的道理,如果兩張圖象一模一樣,那alpha混合出來的的圖象還是圖象本身。

呵呵,是不是很簡單~~~~

有沒有高階點的方法?這中方法好象很浪費機器效能。

的確,因為人物在繪製的時候多了重繪alpha部分,效能上會有不少折扣,特別是在目前網路遊戲盛行,如果在一棵大樹下有幾十上百個玩家,那我們的機器就 ……(準備好滅火器,以免cpu過熱著火);當然,如果你的遊戲人物不多或對效能要求不高,還是比較建議使用此方法,畢竟此方法簡單,而且不容易出錯。 :)

現在,我們來討論一下「高階」點的遮擋透明效果(由於方法眾多,這裡只討論方法,沒有實際的做法)。

我們可以事先製作好各遮擋物體的掩膜(這個也可以用2d圖象中的colorkey來代替或者用alpha通道來實現),然後在繪製的時候根據掩膜進行相對判定,假設在繪製人物的過程中,程式遇到與遮擋物產生遮擋,此時人物圖象又有部分被遮擋物所覆蓋,那我們可以根據事先準備好的遮擋物掩膜來進行是否繪製人物各畫素的判定;於此相同,在繪製alpha部分的時候同樣根據遮擋物掩膜來判定是否進行繪製,這樣能夠在一定程度上緩解繪圖給程式帶來的負擔,但也給製作上帶來了複雜的計算,如圖:

中國遊戲開發技術資源網

2D遊戲中的技能特效

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

2D遊戲中的技能特效

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

2D遊戲中的碰撞檢測

近期做了乙個類似坦克大戰的android遊戲。關於碰撞檢測有一些收穫,記錄一下。開始的思路是,將遊戲分成行列組成的小塊,當玩家或者怪物移動到某塊時,就將此小塊的id改為玩家或者怪物的id,子彈和怪物的碰撞,也是同樣處理。但是這樣造成的問題就是,每次玩家和怪物都必須行走乙個整格仔。玩家的移動,看起來有...