通常我们在2D游戏中经常使用人物的半透明效果来表示人物被建筑物所遮挡,这种效果做法不但画面效果较佳,而且能让玩家更好的了解自己所控制玩家当前位置,才不会被物件所遮挡,茫然失去方向。这里,我们就是来讲讲简单的处理方法。
我们的游戏场景一般由地表层、建筑(遮挡)层、人物层来进行管理,其中建筑和人物层必须经过排序处理来确定绘制的先后次序,这就产生了人物与建筑、建筑与人物的一种相互遮挡关系;我们来看看我们所需要的资源:
地表层图象
人物图象
遮挡物图象
我们现在要做的就是把这3者有机的结合起来,组成我们的游戏画面。
地表层通常不存在遮挡关系,因而一般都直接进行绘制,不需要多做处理,然后就是人物与物件遮挡的关系处理,一般情况下,我们都会得出这样一个结果:
图1
我们把最基本的东西实现了,但我们要如何实现人物部分的透明呢?这时候我们用一个很简单的技巧就能够实现,只要在人物原来的位置再绘制一边Alpha混合的人物图象,这样就能得到我们所需要的效果:
图2
我们马上就可以看到人物的脑袋已经半透明的,但身体部分还保持原来的色彩,这是个很简单的道理,如果两张图象一模一样,那Alpha混合出来的的图象还是图象本身。
呵呵,是不是很简单~~~~
有没有高级点的方法?这中方法好象很浪费机器性能。
的确,因为人物在绘制的时候多了重绘Alpha部分,性能上会有不少折扣,特别是在目前网络游戏盛行,如果在一棵大树下有几十上百个玩家,那我们的机器就 ……(准备好灭火器,以免CPU过热着火);当然,如果你的游戏人物不多或对性能要求不高,还是比较建议使用此方法,毕竟此方法简单,而且不容易出错。 :)
现在,我们来讨论一下“高级”点的遮挡透明效果(由于方法众多,这里只讨论方法,没有实际的做法)。
我们可以事先制作好各遮挡物体的掩膜(这个也可以用2D图象中的ColorKey来代替或者用Alpha通道来实现),然后在绘制的时候根据掩膜进行相对判定,假设在绘制人物的过程中,程式遇到与遮挡物产生遮挡,此时人物图象又有部分被遮挡物所覆盖,那我们可以根据事先准备好的遮挡物掩膜来进行是否绘制人物各像素的判定;于此相同,在绘制Alpha部分的时候同样根据遮挡物掩膜来判定是否进行绘制,这样能够在一定程度上缓解绘图给程式带来的负担,但也给制作上带来了复杂的计算,如图:
图3
后语,我们在游戏中使用什么方式来实现游戏并不重要,关键是要在开发难度以及所获得效果中取得平衡点,用最少的力实现最佳的效果,提高整体游戏开发的制作势力。