除雾特效
来源:互联网 发布:指纹比对软件 编辑:程序博客网 时间:2024/04/30 21:05
最近玩了一个游戏,里面有个特效,就像是玻璃上面有一层雾,然后鼠标移动可以擦除这些雾看清楚雾后面的内容。如图:
感觉这种效果挺有趣的,于是就做了一个DEMO。代码如下:
package{import flash.display.BlendMode;import flash.display.Sprite;import flash.events.Event;import flash.events.MouseEvent;import flashx.textLayout.formats.BackgroundColor;[SWF(backgroundColor="#cccccc")]public class BlendModeTest extends Sprite{[Embed(source="back.jpg")]private var Back:Class;private var crtCircleList:Array = [];private var returnCircleList:Array = [];private var erase:Sprite;public function BlendModeTest(){super();addChild(new Back());//加入遮罩层var maskLayer:Sprite = new Sprite();addChild(maskLayer);maskLayer.blendMode = BlendMode.LAYER;//加入遮挡var mask:Sprite = new Sprite();mask.graphics.beginFill(0xFFFFFF, 0.8);mask.graphics.drawRect(0,0,stage.stageWidth, stage.stageHeight);mask.graphics.endFill();maskLayer.addChild(mask);//加入擦除层erase = new Sprite();erase.blendMode = BlendMode.ERASE;maskLayer.addChild(erase);//添加监听stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHd);stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHd);addEventListener(Event.ENTER_FRAME, onEnterFrame);}private function onMouseDownHd(e:MouseEvent):void{stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHd);}private function onMouseUpHd(e:MouseEvent):void{stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHd);}private function onMouseMoveHd(e:MouseEvent):void{var cc:Circle;if(returnCircleList.length > 0){cc = returnCircleList.pop();cc.init();}else{cc = new Circle();}cc.x = mouseX;cc.y = mouseY;crtCircleList.push(cc);erase.addChild(cc);}private function onEnterFrame(e:Event):void{var cc:Circle;for(var i:int = 0; i<crtCircleList.length; i++){cc = crtCircleList[i];cc.render();if(cc.alpha <= 0){erase.removeChild(cc);returnCircleList.push(crtCircleList.splice(i, 1)[0]);i--;}}}}}import flash.display.GradientType;import flash.display.Sprite;import flash.geom.Matrix;/** *创建一个渐变圆 * @author AresLee * */class Circle extends Sprite{public function Circle( ):void{var cs:Array = [0xFFFFFF, 0xFFFFFF];var als:Array = [1, 0];var ras:Array = [100, 200];this.graphics.beginGradientFill(GradientType.RADIAL, cs, als, ras);this.graphics.drawCircle(0,0,80);this.graphics.endFill();}public function init( ):void{this.alpha = 1;}public function render( ):void{if(this.alpha > 0){this.alpha -= 0.01;}}}
其核心思想就是用到了Blendmode里面的erase效果。
1、添加背景图片到舞台
2、创建一个渐变的形状
3、添加遮挡层,用来包含遮挡图和擦除层,blendmode设置为layer
4、添加遮挡的图形
5、添加擦除层,blendmode设置为ereas
6、鼠标移动的时候,不断创建渐变形状,为了避免大量创建,事例用了对象池
7、每帧不断降低创建出来的渐变形状的alpha值
8、当alpha为0时回收对象。
由于不知道博客如何插入swf文件所以看不了效果啦。。
- 除雾特效
- js标签添加与移除特效
- 图片特效展示(鼠标移入移除特效)
- 体积雾特效
- 特效
- 特效
- 特效
- 特效
- 特效
- 特效
- 特效
- 特效
- Global Fog全局雾特效
- Unity 5.6 雾特效开启
- SVG特效&canvas特效
- Android特效-视差特效
- JS特效(鼠标特效)
- 除运算
- 游戏
- Android之 GridView学习笔记
- 关于软件工程的一些基本概念
- ACM 推荐blog汇总及OJ
- 关于valign属性
- 除雾特效
- LeetCode OJ——Candy
- 错误提示:org.springframework.beans.NotWritablePropertyException: Invalid property
- Android RadioButton学习笔记
- Jlist基础总结(-)
- opengles相关文章
- 解释结构模型ISM-2-1
- linux select函数详解
- RobocupRescue烂尾代码