Godot在2D环境的仿3D游戏的图层计算
引⼦
others是什么我所⽤的游戏引擎是Godot,⼀个⽤c++写的开源2d/3d游戏引擎,代码托管在github上,拥有⼀套⽐较完整的⼯具,并且使⽤整个引擎做的游戏对于版本管理⼯具⽐较友好,有⾃⼰的脚本语⾔(语法类似Python)。具体的可以到官⽹上⾯去看介绍(英⽂)。
游戏
下⾯是我做的游戏的⼀些⼤致机制的抓屏。
123
可以看到,这是⼀个固定视⾓的伪3D游戏,具体操作是通过使⽤上下左右四个⽅向来使⽅块移动,从⽽是⽅块达到⼀定的⾼度或形状。陈奕迅 睾丸
问题
我⼀开始学整个引擎的时候都是在2d环境下制作游戏,⽽且这个游戏的贴图都是2d的像俗画,所以我在做这个游戏⼩样的时候就也没有多想,直接在2d环境下开⼲了。
但是即使我对每个⽅块都设置各⾃在整个三维⽹格中的座标,2d环境能够给我的就只是哪些图⽚(在我这个游戏中就是⽅块的贴图)往哪个⽅向移动,哪些图⽚先渲染(会被后⾯的遮住),哪些图⽚后渲染(不会被遮住)⽽已。所以为了让整个⽹格显⽰正常,必须⼿动来处理这个⽹格的渲染顺序,或者说处理好⽅块的渲染顺序。
引擎拾人牙慧造句>给老婆买礼物
陈意涵电影Godot引擎的游戏的制作⽅法是以“节点”的⽅式制作,每个节点可以是不同种类的东西,也可以是另外制作好的“节点”,每个独⽴制作的节点成为“场景”(scene),⽽节点的顺序,就是引擎渲染的顺序,有撒谎哪个到下依次渲染,所以最下⾯的节点是最后渲染的。
如果有⼀个跟节点类型为 Node2D ,字节点是3个TextureRect,那么不论这三个TextureRect的贴图⼤⼩如何,位置如何,最下⾯的TextureRect是不可能被前两个TextureRect遮挡住的。
好听的帮会名字不过对于 Node2D ,有⼀个属性是 Z Index ,这个属性是引擎中的 Z 轴,相当于在你⼿垂直举着⼀张纸时垂直于直⾯的⼀条线。有了这个,就能⼿动地控制哪些⽅块在哪些⽅块的上⾯了。
座标
1.gif
2.gif 写在最后
公式很简单,但是我却花了很多时间去调试第⼀条公式,不断地调整,试过在每两层之间添加⼀个过渡层,但是因为引擎本⾝的图层渲染顺序会有时候看不出来问题。不过有前辈说过,写程序的时候⾛的弯路都不是弯路。幸好最后都想出来了正确的做法,花的时间应该都是值得的。