Flash 特效原理:震动效果

今天无聊中在百度看到一种效果叫震动效果。它可以应用在按钮上,也可以在窗口上。就好像QQ那样震动。于是根据他们的想法,随手写了一个简单实现效果。

 

 

基本的办法,就是想办法改变他们X和Y坐标,让其进行变化。

 

初步思路:

 

在时间器下

contain.x=startX+随机数;

contain.y=startY+随机数;

 

在时间的变化下,产生时间动画。contain.x 和contain.y 就会产生变化过程。

 

贴上一张演示图,我们在舞台上,创建一些的按钮和元件。当鼠标经过表面的时候,开始动画,离开的时候结束动画并返回位置

 

 

下面封装一个类

//震动效果 package org.summerTree.effect { import flash.display.*; import flash.utils.Timer; import flash.utils.Dictionary; import flash.events.*; public class ShakeEffect { private var timer:Timer; private var deley:Number; private var startX:Number; private var startY:Number; private var para:Number;//震动的参数 private var m_contain:Dictionary; private var currentID:String; public function ShakeEffect(deley:Number=100,para:Number=5) { m_contain=new Dictionary(true); this.deley=deley; this.para=para; timer=new Timer(deley); timer.addEventListener(TimerEvent.TIMER,onTimer); } /* 添加列表 * * */ public function addList(id:String,obj:*):void { m_contain[id]=obj; } private function onTimer(event:TimerEvent):void { moveBy(); } public function start(id:String):void { startX=getObject(id).x; startY=getObject(id).y; currentID=id; timer.start(); } private function getObject(id:String):* { return m_contain[id]; } public function stop():void { timer.stop(); getObject(currentID).x=startX; getObject(currentID).y=startY; } public function destory():void { timer.removeEventListener(TimerEvent.TIMER,onTimer); } public function reStart():void { timer=new Timer(deley); timer.addEventListener(TimerEvent.TIMER,onTimer); } // private function moveBy():void { getObject(currentID).x=startX+Math.random()*para; getObject(currentID).y=startY+Math.random()*para; } } }

 

 

演示:

在舞台上,添加一些影片剪辑。改名为mc1----mc6。在使用的时候,我们添加他们名称和元件名称。

 

创建一个ShakeEffect类,然后写上一个时间延时。将需要添加震动效果的按钮加上去。

addList(id,对象)

 

(注意 Timer 执行的快慢取决于帧速或flash环境等因数,每次调用的时候会有偏差。)

 

 

 效果很容易出来了。

 

下载demo

import org.summerTree.effect.ShakeEffect; var shake:ShakeEffect=new ShakeEffect(60); shake.addList(mc1.name,mc1); shake.addList(mc2.name,mc2); shake.addList(mc3.name,mc3); shake.addList(mc4.name,mc4); shake.addList(mc5.name,mc5); shake.addList(mc6.name,mc6); mc1.addEventListener(MouseEvent.MOUSE_OVER,onOver); mc2.addEventListener(MouseEvent.MOUSE_OVER,onOver); mc3.addEventListener(MouseEvent.MOUSE_OVER,onOver); mc4.addEventListener(MouseEvent.MOUSE_OVER,onOver); mc5.addEventListener(MouseEvent.MOUSE_OVER,onOver); mc6.addEventListener(MouseEvent.MOUSE_OVER,onOver); function onOver(event:MouseEvent):void { shake.start(event.currentTarget.name); } mc1.addEventListener(MouseEvent.MOUSE_OUT,onOut); mc2.addEventListener(MouseEvent.MOUSE_OUT,onOut); mc3.addEventListener(MouseEvent.MOUSE_OUT,onOut); mc4.addEventListener(MouseEvent.MOUSE_OUT,onOut); mc5.addEventListener(MouseEvent.MOUSE_OUT,onOut); mc6.addEventListener(MouseEvent.MOUSE_OUT,onOut); function onOut(event:MouseEvent):void { shake.stop(); }

 

 

累了,明天继续修改,加油!

你可能感兴趣的:(flash,特效原理)