flash 与动画:发光
发布时间:2020-12-15 06:11:19 所属栏目:百科 来源:网络整理
导读:?????? 今天抽了点时间做了一个比较简单的实验,就是通过遮罩来实现一道光划过的效果。在flash 可以通过遮罩层来实现遮罩光效,简单实用,下面无聊写了一个比较简单的东西。实现简单的发光,不过,光效并不强烈,总是缺少一点什么。 ? ?????????? ? package
?????? 今天抽了点时间做了一个比较简单的实验,就是通过遮罩来实现一道光划过的效果。在flash 可以通过遮罩层来实现遮罩光效,简单实用,下面无聊写了一个比较简单的东西。实现简单的发光,不过,光效并不强烈,总是缺少一点什么。 ? ?????????? ? package { import flash.display.Sprite; import flash.display.DisplayObject; import flash.utils.Timer; import flash.events.TimerEvent; import flash.display.Bitmap; import flash.display.Shape; import flash.display.BitmapData; import flash.filters.GlowFilter; import flash.geom.ColorTransform; import flash.display.BlendMode; import flash.events.Event; import flash.geom.*; public class LightEffect { private var timer:Timer; private var glowShape:Shape; private var speed:Number; private var initSpeed:Number; private var maxLen:int; private var isFinish:Boolean = false; public var a:Number = 0.12; private var bitmap:Bitmap; public var init_a:Number=0.12; public function LightEffect(delay:Number,speed:Number) { timer = new Timer(delay); this.speed = speed; this.initSpeed = speed; timer.addEventListener(TimerEvent.TIMER,onTimer); } private function onTimer(event:TimerEvent):void { if (isFinish==false) { isFinish = true; glowShape.addEventListener(Event.ENTER_FRAME,onMoveGlow); } } private function onMoveGlow(event:Event):void { glowShape.x += speed; speed -= a; if (glowShape.rotation != 0) { glowShape.y += speed; if (glowShape.x > maxLen + 20) { glowShape.x = 0; glowShape.y = 0; isFinish = false; a = init_a; speed = initSpeed; glowShape.removeEventListener(Event.ENTER_FRAME,onMoveGlow); } } else { if (glowShape.x > maxLen + 10) { glowShape.x = - glowShape.width; isFinish = false; a = init_a; speed = initSpeed; glowShape.removeEventListener(Event.ENTER_FRAME,onMoveGlow); } } } //设置发光对象 public function setTargetGlow(displayObject:Sprite,rotation:Number,mask_W:Number=0,mask_H:Number=0):void { var container:Sprite=new Sprite(); var copyBmp:BitmapData = new BitmapData(displayObject.width,displayObject.height,true,0x0); copyBmp.draw(displayObject); bitmap = new Bitmap(copyBmp); bitmap.blendMode = BlendMode.SCREEN; this.maxLen = bitmap.width; container.addChild(bitmap); glowShape=new Shape(); glowShape.graphics.beginFill(0xffffff); if (rotation!=0) { glowShape.rotation = rotation; var w:Number = mask_W == 0 ? displayObject.width / 6:mask_W; var h:Number = mask_H == 0 ? displayObject.height:mask_H; glowShape.graphics.drawRect(-w/2,-h/2,w,h); } else { glowShape.graphics.drawRect(0,displayObject.width/4,displayObject.height); } glowShape.graphics.endFill(); glowShape.cacheAsBitmap = true; bitmap.cacheAsBitmap = true; container.addChild(glowShape); bitmap.mask = glowShape; displayObject.addChild(container); timer.start(); } //停止发光 public function stopGlow():void { timer.stop(); } //移除效果 public function removeListener():void { timer.stop(); glowShape.removeEventListener(Event.ENTER_FRAME,onMoveGlow); timer.removeEventListener(TimerEvent.TIMER,onTimer); timer = null; } } }
var effect:LightEffect=new LightEffect(80,6); ?由于设置一个减速的过程,可以修改这个程序让对加速度的值符合动画所需,当中会存在一个不完善的地方,例如遮罩后的光面,没想想象那么强烈,在实验的时候会存在这些疑惑.等等。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |