平滑的战争迷雾效果是如何实现的?

如题所述

由于是做2D游戏,所以思路基本上是2D,但是同时也有3D思想,例如图层混合方式处理等。主要原理就是根据图片的alpha值来进行反向擦除(alpha为1时完全擦除,alpha越小则越不透明,实现渐变过程效果)。最后用了两种比较简单的方法来实现了这种效果,两者有微弱的差别。这里采用的是AS3实现的,源码也提供了几种渐变图片,可以作为点光源来擦亮迷雾,可以替换上去看各种效果的。
最先想到的原理,是基于之前实现类似点光源效果的做法。通过一层带有alpha值遮罩图来擦掉对应的战争迷雾,就是移动版增大的点光源效果。首先人物背景,然后一层战争迷雾在最顶层,人物带了个点光源,然后人物移动的时候,不会把那个点光源层进行绘制,那么光源层就会原来越大。那个迷雾自然就会越来越大了。 这样跟随人物移动不断地把遮罩扩大。除了最开始的合成遮罩图,后面的处理跟之前讲的新手引导遮罩和点光源实现机制一样,后面会给出相关的代码。不过这种实现是有点不好的是合并alpha,这样会导致范围突然变亮(因为alpha相加大于1,就全部擦了,大部分亮了,也就是会有个逐渐变亮的效果,使得战争迷雾开启效果没那么真实)。

直接擦出战争迷雾方法(橡皮擦功能)
实际测试了下,对遮罩擦除做法这个效果不太满意。于是再研究了一下,想到了橡皮效果,直接用点光源图片把战争迷雾一点点擦掉又如何呢?赶紧仔细看了相关api,还真有类似的实现效果。主要还是bitmapData的draw方法,重点是这个方法的第四个参数,所以我们每次在战争迷雾这个层次这里每次根据玩家移动,调用draw方法把角色带的点光源图片给draw进入战争迷雾的BitmapData中,然后设置为根据alpha的参数来擦出,露出最终的背景就行了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-16

像魔兽争霸3这种游戏,一开始的时候呢,满地图都是黑的,只有你的基地和兵所在的地方可以看到东西。然后你控制你的兵进行探索,你的兵所到的位置烟雾就消失啦,可以看到很清晰的地图上的细节。但是当你的兵离开以后,地图就灰了,你看不到实时的细节,比如那个位置有没有敌兵或者怪物,但是还是可以看到灰色的地形细节。我把这种东西叫做战争迷雾。嗯,最近学了占用影响图,想到了一个战争迷雾的实现方法。这个方法就是用占用影响图。 首先定义一个gameObj(游戏物件——暂且这么叫),这个可以代表你的兵和你的建筑。 struct 注册物件,gameObj 游戏物件;int 注册物件宽;  int 注册物件高;  int 注册物件类型;Vector3   注册物件上一次位置;(我们用一个三维向量表示物件位置,但是实际上我们的影响图的逻辑是2d的,所以只会用到注册物件位子的x,y两个坐标值)bool 是否对占用影响图产生作用;class 占用影响图。

第2个回答  2017-11-16

简单来说就是在你的游戏场景上用若干个黑色小平面拼接起来挡住,当你的游戏物体比如坦克的位置距离这些小平面达到一定距离(这里主要是平面位置所以应该忽略Y坐标)的时候删除这些小平面或者使这些小平面变透明从而使摄像机能看到小平面之下的场景。

迷雾和单位可见性相关.那么并不需要没个像素都算.一个单位也不可能显示一部分.只可能完整的显示或不显示.所以有多少单位就算多少次就行了. 似乎没你想象的计算量大啊.

有可能处理办法和曾经一样,只不过硬件上去了,原来n x n 的格子变成了n方xn方个~

本回答被网友采纳