2011年8月11日 星期四

小小3D旋轉+火燒效果



package {
import com.greensock.easing.Back;
import com.greensock.TweenMax;
import com.liontech.effect.BlazingEffect;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.utils.Timer;
import com.greensock.plugins.*;

TweenPlugin.activate([ShortRotationPlugin, TransformAroundPointPlugin, TransformAroundCenterPlugin]);

/**
* ...
* @author Ray
*/
public class Rotaion extends Sprite {

private var _card:CardMc;
private var _smokerMc:SmokerMc;
private var _rayCard:RayCard;
private var _rayContaner:Sprite;
private var _contaner:Contaner=new Contaner();
private var _centerX:Number;
private var _centerY:Number;
private var _num:int = 13;
private var _agrUtil:Number;
private var _vector:Vector. = new Vector.();
private var _radius:Number = 250;//直徑

private var _timerA:Timer=new Timer(3000,1);
private var _timerB:Timer=new Timer(6000,1);
private var _timerC:Timer=new Timer(4000,1);
private var _timerD:Timer=new Timer(6000,1);
private var _timerE:Timer=new Timer(3000,1);

public function Rotaion() {

if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
if(stage.stageWidth==0)this.addEventListener(Event.ENTER_FRAME,onEnterFrameHandler)
else onEnterFrameHandler(e);
}

private function onEnterFrameHandler(e:Event):void {
removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
playIndex();
}

private function playIndex():void {
_centerX = stage.stageWidth / 2;
_centerY = stage.stageHeight / 2;
_smokerMc = new SmokerMc();
_smokerMc.x = _centerX;
_smokerMc.y = _centerY;
_rayCard = new RayCard();
_rayCard.x = _centerX-_rayCard.width/2;
_rayCard.y = _centerY-_rayCard.height/2;
_rayCard.alpha = 0;
/*_rayCard.scaleX = _rayCard.scaleY = 0.2;*/
TweenMax.to(_rayCard,0.1,{transformAroundCenter:{scaleX:0, scaleY:0}})
addChild(_rayCard);
//_card.addEventListener(Event.ENTER_FRAME, onRotaion);

_agrUtil = Math.PI*2 / _num;

for (var i:int = 0; i < _num; i++ ) {
var rr:Number = _agrUtil * i;
_card = new CardMc();
_card.name = "cardItem"+i;
_card.x = 0;
_card.y = 0;
_card.scaleX = _card.scaleY = 0.5;
TweenMax.to(_card, .5, { x:Math.cos(rr)*_radius,y:Math.sin(rr)*_radius,delay: 0.5+i*0.1,ease:Back.easeInOut} )
_contaner.addChild(_card);
}

_contaner.x = stage.stageWidth / 2 ;
_contaner.y = stage.stageHeight / 2;
addChild(_contaner);
_timerA.addEventListener(TimerEvent.TIMER, onTimerAEventHandler);
_timerB.addEventListener(TimerEvent.TIMER, onTimerBEventHandler);
_timerC.addEventListener(TimerEvent.TIMER, onTimerCEventHandler);
_timerD.addEventListener(TimerEvent.TIMER, onTimerDEventHandler);
_timerE.addEventListener(TimerEvent.TIMER, onTimerEEventHandler);
_timerA.start();
}

private function onTimerAEventHandler(e:TimerEvent):void {
trace("ttt")
_contaner.addEventListener(Event.ENTER_FRAME, onRotaion);
for (var i:int = 0; i < _num; i++) {
var mm:MovieClip = _contaner.getChildByName("cardItem" + i) as MovieClip;
mm.addEventListener(Event.ENTER_FRAME, onRotaionCard);
}
_timerA.removeEventListener(TimerEvent.TIMER, onTimerAEventHandler);
_timerB.start();
}

private function onTimerBEventHandler(e:TimerEvent):void {
for (var i:int = 0; i < _num; i++) {
var mm:MovieClip = _contaner.getChildByName("cardItem" + i) as MovieClip;
TweenMax.to(mm, .5, { x:0,y:0,delay: 0.5+i*0.1,ease:Back.easeInOut} )
}
_timerB.removeEventListener(TimerEvent.TIMER, onTimerBEventHandler);
_timerC.start();
}

private function onTimerCEventHandler(e:TimerEvent):void {
var $tarX:Number = -300;
trace("$tarX----------",$tarX)
var $tarY:Number = 100;
TweenMax.to(_contaner,.5,{x:_centerX,y:_centerY})
_contaner.removeEventListener(Event.ENTER_FRAME, onRotaion);
for (var K:int = 0; K < _num; K++) {
var mm:MovieClip = _contaner.getChildByName("cardItem" + K) as MovieClip;
//mm.removeEventListener(Event.ENTER_FRAME, onRotaionCard);
TweenMax.to(mm, .5, { rotationX:0,rotationY:0 } );
}
_contaner.rotationX=0
_contaner.rotationY=0
for (var j:int = 1; j <= 2; j++ ) {
for (var i:int = 1; i <= 13; i++ ) {
if(j%2==0){
if(i%2!=0) continue;
}else{
if(i%2==0) continue;
}
//trace(j,"---------j")
trace(i,"---------i")
var mm2:MovieClip =_contaner.getChildByName("cardItem"+ (i-1)) as MovieClip;
TweenMax.to(mm2, .5, { x:($tarX + (i-1)*50), y:$tarY * j ,scaleX:0.2,scaleY:0.2, delay: 0.5 + i * 0.1, ease:Back.easeInOut } )
}
}
_timerC.removeEventListener(TimerEvent.TIMER, onTimerCEventHandler);
_timerD.start();
}
private function onTimerDEventHandler(e:TimerEvent):void {
var $tmp:int = 0;
for (var i:int = 0; i < _num; i++) {
var mm:MovieClip = _contaner.getChildByName("cardItem" + i) as MovieClip;
TweenMax.to(mm, .5, { x:0, y:0, scaleX:0.2 + 0.07 * i, scaleY:0.2 + 0.07 * i, delay: 0.5 + i * 0.1, ease:Back.easeInOut, onComplete:function():void {
$tmp += 1;
if ($tmp == 13) {
addChild(_smokerMc);
_smokerMc.play();
removeChild(_contaner);
TweenMax.to(_rayCard,.3,{alpha:1,transformAroundCenter:{scaleX:1, scaleY:1},delay:0.3,ease:Back.easeInOut})
_timerE.start();
}
}} )
mm.addEventListener(Event.ENTER_FRAME, onRotaionCard);
}

_timerD.removeEventListener(TimerEvent.TIMER, onTimerDEventHandler);
}

private function onTimerEEventHandler(e:TimerEvent):void {
trace("火");
removeChild(_smokerMc);
_rayContaner = new Sprite();
addChild(_rayContaner);
var $effect:BlazingEffect = new BlazingEffect(_rayContaner, _rayCard);
$effect.addEventListener(BlazingEffect.EFFECT_COMPLETE, onEffectCompleteHandler);
_timerE.removeEventListener(TimerEvent.TIMER, onTimerEEventHandler);
}

private function onEffectCompleteHandler(e:Event):void {
trace("Over")
var $rainMc:RainMc = new RainMc();
$rainMc.x = _centerX;
$rainMc.y = _centerY;
$rainMc.buttonMode = true;
//$rainMc.alpha = 0;
TweenMax.from($rainMc, .5, { alpha:0,blurFilter: { blurX:20}} );
addChild($rainMc);
$rainMc.addEventListener(MouseEvent.CLICK, onMouseClickHandler);
}

private function onMouseClickHandler(e:MouseEvent):void {
var urlquest:URLRequest = new URLRequest("http://www.rainmaker96.com.tw/");
navigateToURL(urlquest);
}

private function onRotaion(e:Event):void {
_contaner.rotationY = _contaner.rotationY % 360;
_contaner.rotationX = _contaner.rotationX % 360;
_contaner.rotationY += (_centerX - stage.mouseY) / 30;
_contaner.rotationX += (_centerY - stage.mouseX) / 30;
//_contaner.rotationY = 360;
//trace("rotaionX-------",_contaner.rotationX)
//_card.rotationZ += (_center - stage.mouseX) / 20;
}
private function onRotaionCard(e:Event):void {

e.currentTarget.rotationX -= (_centerX - stage.mouseX) / 50;
e.currentTarget.rotationY -= (_centerY - stage.mouseY) / 50;

}
}

}

沒有留言:

張貼留言

我的留言版