这次用as3的矩阵来实现一些简单的关闭效果,作为矩阵使用的例子.
下面是完整的类:
/**
* 旋转并缩小,最终关闭
* */
public function close(control:DisplayObject):void{
var timer:Timer = new Timer(44,0);
timer.addEventListener(TimerEvent.TIMER,onTimer);
timer.start();
var sx:Number = 1,sy:Number = 1;
var m:Matrix = new Matrix();
var angle:Number = 0;
function onTimer(e:TimerEvent):void{
sx -= 0.1;
sy -= 0.1;
angle += 1.4;
m.createBox(sx,sy,angle,control.x,control.y);
control.transform.matrix = m;
if(sx <0){
timer.stop();
control.parent.removeChild(control);
}
}
}
/**
* 缩小到左上角,直到关闭
* */
public function close2(obj:DisplayObject):void{
if(obj != null){
var sx:Number = 1,sy:Number = 1;
var m:Matrix = new Matrix();
var ox:Number = obj.x,oy:Number = obj.y;
var timerId:uint = setInterval(function():void{
m.identity();
m.translate(obj.x,obj.y);
m.scale(sx,sy);
obj.transform.matrix = m;
sx -= 0.1;
sy -= 0.1;
if(obj.x <= 0){
clearInterval(timerId);
obj.parent.removeChild(obj);
}
},50);
}
}
/**
* 向中间缩小
* */
public function close3(obj:DisplayObject):void{
if(obj != null){
var timerId:uint = setInterval(function():void{
obj.width *= 0.6;
obj.height *= 0.6;
obj.x += obj.width/4;
obj.y += obj.height/4;
if(obj.width <= 1){
clearInterval(timerId);
obj.parent.removeChild(obj);
}
},44);
}
}
下面是完整的类:
package effects
{
import flash.display.DisplayObject;
import flash.events.TimerEvent;
import flash.geom.Matrix;
import flash.utils.Timer;
import flash.utils.clearInterval;
import flash.utils.setInterval;
public class EffectTool
{
public function EffectTool()
{
}
/**
* 旋转并缩小,最终关闭
* */
public function close(control:DisplayObject):void{
var timer:Timer = new Timer(44,0);
timer.addEventListener(TimerEvent.TIMER,onTimer);
timer.start();
var sx:Number = 1,sy:Number = 1;
var m:Matrix = new Matrix();
var angle:Number = 0;
function onTimer(e:TimerEvent):void{
sx -= 0.1;
sy -= 0.1;
angle += 1.4;
m.createBox(sx,sy,angle,control.x,control.y);
control.transform.matrix = m;
if(sx <0){
timer.stop();
control.parent.removeChild(control);
}
}
}
/**
* 缩小到左上角,直到关闭
* */
public function close2(obj:DisplayObject):void{
if(obj != null){
var sx:Number = 1,sy:Number = 1;
var m:Matrix = new Matrix();
var ox:Number = obj.x,oy:Number = obj.y;
var timerId:uint = setInterval(function():void{
m.identity();
m.translate(obj.x,obj.y);
m.scale(sx,sy);
obj.transform.matrix = m;
sx -= 0.1;
sy -= 0.1;
if(obj.x <= 0){
clearInterval(timerId);
obj.parent.removeChild(obj);
}
},50);
}
}
/**
* 向中间缩小
* */
public function close3(obj:DisplayObject):void{
if(obj != null){
var timerId:uint = setInterval(function():void{
obj.width *= 0.6;
obj.height *= 0.6;
obj.x += obj.width/4;
obj.y += obj.height/4;
if(obj.width <= 1){
clearInterval(timerId);
obj.parent.removeChild(obj);
}
},44);
}
}
}
}