Godot在2D環(huán)境的仿3D游戲的圖層計算

引子

我所用的游戲引擎是Godot涝缝,一個用c++寫的開源2d/3d游戲引擎窑眯,代碼托管在github上梭伐,擁有一套比較完整的工具,并且使用整個引擎做的游戲?qū)τ诎姹竟芾砉ぞ弑容^友好陡叠,有自己的腳本語言(語法類似Python)玩郊。具體的可以到官網(wǎng)上面去看介紹(英文)。

游戲

下面是我做的游戲的一些大致機(jī)制的抓屏枉阵。


123

可以看到译红,這是一個固定視角的偽3D游戲,具體操作是通過使用上下左右四個方向來使方塊移動兴溜,從而是方塊達(dá)到一定的高度或形狀侦厚。

問題

我一開始學(xué)整個引擎的時候都是在2d環(huán)境下制作游戲,而且這個游戲的貼圖都是2d的像俗畫拙徽,所以我在做這個游戲小樣的時候就也沒有多想刨沦,直接在2d環(huán)境下開干了。

但是即使我對每個方塊都設(shè)置各自在整個三維網(wǎng)格中的座標(biāo)膘怕,2d環(huán)境能夠給我的就只是哪些圖片(在我這個游戲中就是方塊的貼圖)往哪個方向移動想诅,哪些圖片先渲染(會被后面的遮住)岛心,哪些圖片后渲染(不會被遮桌雌啤)而已。所以為了讓整個網(wǎng)格顯示正常忘古,必須手動來處理這個網(wǎng)格的渲染順序徘禁,或者說處理好方塊的渲染順序。

引擎

Godot引擎的游戲的制作方法是以“節(jié)點(diǎn)”的方式制作髓堪,每個節(jié)點(diǎn)可以是不同種類的東西送朱,也可以是另外制作好的“節(jié)點(diǎn)”,每個獨(dú)立制作的節(jié)點(diǎn)成為“場景”(scene)干旁,而節(jié)點(diǎn)的順序驶沼,就是引擎渲染的順序,有撒謊哪個到下依次渲染争群,所以最下面的節(jié)點(diǎn)是最后渲染的商乎。
如果有一個跟節(jié)點(diǎn)類型為 Node2D ,字節(jié)點(diǎn)是3個TextureRect祭阀,那么不論這三個TextureRect的貼圖大小如何鹉戚,位置如何,最下面的TextureRect是不可能被前兩個TextureRect遮擋住的专控。

不過對于 Node2D 抹凳,有一個屬性是 Z Index ,這個屬性是引擎中的 Z 軸伦腐,相當(dāng)于在你手垂直舉著一張紙時垂直于直面的一條線赢底。有了這個,就能手動地控制哪些方塊在哪些方塊的上面了柏蘑。

設(shè)定

游戲內(nèi)的座標(biāo)


座標(biāo)
  • 游戲座標(biāo) :是指在上圖網(wǎng)格中的座標(biāo)
  • 引擎座標(biāo) :是指在游戲引擎中的座標(biāo)

計算方式

接下來就是真正的計算方式了幸冻,嘿嘿

first try

這里要先弄清楚一點(diǎn),在上圖中最下面的格子中的方塊的圖層肯定是會比在座標(biāo)原點(diǎn)的格子的方塊圖層要高咳焚,也就是說最下面的方塊的引擎內(nèi)z軸一定會會比原點(diǎn)的方塊高洽损,絕對不會被原點(diǎn)的遮擋的。

那這樣的話革半,即使游戲內(nèi)是在同一層碑定,也需要根據(jù)游戲內(nèi)x軸和游戲內(nèi)y軸來計算圖層,那在統(tǒng)一層的話是怎么算圖層的呢又官?

從原點(diǎn)開始看吧延刘,在原點(diǎn)的方塊上,不論是往游戲內(nèi)的x軸還是游戲內(nèi)的y軸方向上移動一格六敬,引擎內(nèi)的z軸都應(yīng)該加1(或一個計量)碘赖,然后在那個格子再繼續(xù)的話也是加1。那么照這樣算外构,在游戲內(nèi)z軸相等普泡,也就是同一層的情況下,引擎z軸的計算公式是:

  • 引擎z軸 = 游戲x軸 + 游戲y軸

然后因?yàn)橛螒騼?nèi)的網(wǎng)格有z軸典勇,也就是類似于”層“的概念劫哼,我就非常簡單地將每一層疊加起來,所以對于所有方塊:

  • 引擎z軸 = 游戲最大x軸 * 游戲最大y軸 * 游戲z軸 + 游戲x軸 + 游戲y軸

這樣做的問題

正如你在上面的動圖中看到的割笙,方塊的移動有時侯會跨”層“权烧。如果使用這樣的算法,就會出現(xiàn)方塊下降層的時候北原先后面的方塊遮擋住伤溉,或者上升層的時候遮擋住原先在前面的方塊擋住般码。

finished one

上面這個問題一開始我還沒有發(fā)現(xiàn),因?yàn)槲易鲆恍y試地圖的時候乱顾,都會做一些比較簡單的圖來測試板祝。

不過這個問題的解決辦法騎士一開始就已經(jīng)有了,只不過我沒有反應(yīng)過來走净。那就是既然在同一個”層“上是 x+y 券时,那么在此基礎(chǔ)上孤里,把 x+y 作為一個獨(dú)立的軸,加上 z 橘洞,好像就可以了捌袜。

所以對于所有方塊:

  • 引擎z軸 = 游戲x軸 + 游戲y軸 + 游戲z軸

這樣不論什么情況都不會出現(xiàn)不正確遮擋的問題,下面的兩張圖能比較好地證明這個:

1.gif

2.gif

寫在最后

公式很簡單炸枣,但是我卻花了很多時間去調(diào)試第一條公式虏等,不斷地調(diào)整,試過在每兩層之間添加一個過渡層适肠,但是因?yàn)橐姹旧淼膱D層渲染順序會有時候看不出來問題霍衫。不過有前輩說過,寫程序的時候走的彎路都不是彎路侯养。幸好最后都想出來了正確的做法敦跌,花的時間應(yīng)該都是值得的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沸毁,一起剝皮案震驚了整個濱河市峰髓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌息尺,老刑警劉巖携兵,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搂誉,居然都是意外死亡徐紧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門炭懊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來并级,“玉大人,你說我怎么就攤上這事侮腹〕氨蹋” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵父阻,是天一觀的道長愈涩。 經(jīng)常有香客問我,道長加矛,這世上最難降的妖魔是什么履婉? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮斟览,結(jié)果婚禮上毁腿,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好已烤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布鸠窗。 她就那樣靜靜地躺著,像睡著了一般胯究。 火紅的嫁衣襯著肌膚如雪塌鸯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天唐片,我揣著相機(jī)與錄音,去河邊找鬼涨颜。 笑死费韭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的庭瑰。 我是一名探鬼主播星持,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弹灭!你這毒婦竟也來了督暂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤穷吮,失蹤者是張志新(化名)和其女友劉穎逻翁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捡鱼,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡八回,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了驾诈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缠诅。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖乍迄,靈堂內(nèi)的尸體忽然破棺而出管引,到底是詐尸還是另有隱情,我是刑警寧澤闯两,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布褥伴,位于F島的核電站,受9級特大地震影響生蚁,放射性物質(zhì)發(fā)生泄漏噩翠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一邦投、第九天 我趴在偏房一處隱蔽的房頂上張望伤锚。 院中可真熱鬧,春花似錦、人聲如沸屯援。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狞洋。三九已至弯淘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吉懊,已是汗流浹背庐橙。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留借嗽,地道東北人态鳖。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像恶导,于是被迫代替她去往敵國和親浆竭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容