package{ import caurina.transitions.Tweener; import fl.transitions.*; import fl.transitions.easing.*; import flash.display.*; import flash.events.*; import flash.geom.*; import flash.net.*; import flash.text.*; import flash.utils.*; import flash.system.*; import com.flashdynamix.motion.*; public class Tien extends Sprite{ //settings private var theSource:String = "assets/dezeeTrans.png"; private var maskBreedte:Number = 30; private var maskHoogte:Number = 320; private var doelbreedte:Number = 600; private var doelhoogte:Number = 600; private var startPunt:Point = new Point(0,0); //environment private var holder:Sprite = new Sprite(); private var pinkFace:Sprite = new Sprite(); private var sbm:Bitmap; private var bgHolder:Sprite = new Sprite(); //variables private var rr:Number = 0; private var myrr:Number = 0; private var piecesComplete:Number=0; private var garbage:Array = new Array(); private var tijd:Number; //displays private var txtMessage:TextField = new TextField(); private var txtStatus:TextField = new TextField(); private var txtFPS:TextField = new TextField(); private var txtTimer:TextField = new TextField(); private var displayer:Sprite = new Sprite(); //prerender stuff private var bmdarray:Array = new Array(); private var animationHolder:Sprite = new Sprite(); private var animator:Bitmap=new Bitmap(); private var renderholder:Sprite = new Sprite(); private var historybmd:BitmapData; private var historybm:Bitmap; public function Tien(){ stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.addEventListener(Event.RESIZE, manageView); stage.addEventListener(Event.ENTER_FRAME, frameRate); addChild(bgHolder); //holder.cacheAsBitmap=true; historybmd = new BitmapData(doelbreedte,doelhoogte,true,0); historybm = new Bitmap(historybmd); var tFormat:TextFormat = new TextFormat(); tFormat.font = "Arial"; txtMessage.defaultTextFormat = tFormat; txtStatus.defaultTextFormat = tFormat; txtFPS.defaultTextFormat =tFormat; txtTimer.defaultTextFormat=tFormat; addChild(holder); //holder.addChild(pinkFace); holder.visible=true; addChild(displayer); displayer.addChild(txtMessage); displayer.addChild(txtStatus); displayer.addChild(txtFPS); displayer.addChild(txtTimer); txtMessage.autoSize = TextFieldAutoSize.LEFT; txtStatus.autoSize = TextFieldAutoSize.LEFT; txtFPS.autoSize = TextFieldAutoSize.LEFT; txtTimer.autoSize = TextFieldAutoSize.LEFT; //animator.smoothing= true; renderholder.addChild(pinkFace); addChild(renderholder); changeDisplays("Loading background...","Please wait"); updateDisplays(); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, bgLoadCompleteHandler); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,handleProgress); manageView(new Event(Event.RESIZE)); loader.load(new URLRequest("assets/zonenhemel.jpg")); } private function bgLoadCompleteHandler(e:Event):void{ changeDisplays("Background complete."," "); bgHolder.addChild(Bitmap(e.target.content)); manageView(null); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,faceLoaded); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,handleProgress); loader.load(new URLRequest('assets/dorp-face-klein.png')); changeDisplays("Loading pink face...","Please wait"); } private function faceLoaded(e:Event):void{ changeDisplays("Pink face loaded."," "); pinkFace.addChild(Bitmap(e.target.content)); manageView(null); //pinkFace.x = doelbreedte*0.5 - pinkFace.width*0.5; //pinkFace.y = doelhoogte*0.5 - pinkFace.height*0.5; var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, sourceLoadCompleteHandler); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,handleProgress); loader.load(new URLRequest(theSource)); changeDisplays("Loading world...","Please wait"); } private function sourceLoadCompleteHandler(e:Event):void{ holder.visible = true; changeDisplays("World loaded.","Pre-rendering the animation... "); var source:Bitmap = Bitmap(e.target.content); source.smoothing=true sbm = source; //sbm.visible=false; maskBreedte = sbm.width/360; holder.addChild(historybm); //pinkFace.visible=true; //trace(holder.getChildIndex(pinkFace),holder.getChildIndex(historybm)); //setTimeout(function(){historybmd.draw(holder);trace(holder.getChildIndex(pinkFace),holder.getChildIndex(historybm));},2000); //pinkFace.visible=true; enableTimer=true; stage.addEventListener(Event.ENTER_FRAME, prerender); } private function prerender(e:Event):void{ if(rr<361){ var s:Sprite = new Sprite(); var bmpd:BitmapData = new BitmapData(maskBreedte,maskHoogte,true,0xFFFFFF); var bmp:Bitmap = new Bitmap(bmpd); bmp.bitmapData.copyPixels(sbm.bitmapData,new Rectangle(rr*maskBreedte,0,maskBreedte,maskHoogte),new Point(0,0)); s.addChild(bmp); bmp.y = -(maskHoogte); bmp.x = -(maskBreedte*0.5); s.x=doelbreedte*0.5; s.y=doelhoogte*0.5; var theMask:Sprite = new Sprite(); theMask.graphics.lineStyle(0,0xFF0066); theMask.graphics.moveTo(startPunt.x,startPunt.y); theMask.graphics.beginFill(0xFF0066); theMask.graphics.lineTo(startPunt.x + maskBreedte,startPunt.y); // bovenste horizontale lijn theMask.graphics.lineTo((startPunt.x + maskBreedte/2)+1,startPunt.y + maskHoogte); //begin van de piek theMask.graphics.lineTo((startPunt.x + maskBreedte/2)-1,startPunt.y + maskHoogte); //einde van de piek theMask.graphics.lineTo(startPunt.x,startPunt.y); theMask.graphics.endFill(); //de mask en de bitmap samen s.addChild(theMask); theMask.y = -maskHoogte; //mask verplaatsen in de sprite zodat het middelpunt op de juiste plaats staat theMask.x = -(maskBreedte*0.5); //het masker moet perfect in het midden staan, zodat er geen fout ontstaat bmp.mask = theMask; //de driehoek als masker aan de bmp hangen s.rotation = rr; //hiermee ontstaat de rotatie/360 illusie //get ready to tween s.alpha = 0.4; s.scaleX = 0.4; s.scaleY = 0.4; //add the piece to the whole holder.addChild(s); Tweener.addTween(s,{alpha:1,scaleX:1,scaleY:1,time:2.5,onComplete:prerenderPieceComplete, onCompleteParams:[s]}); /*var timeline:TweensyTimeline = Tweensy.to(s, {alpha:1,scaleX:1,scaleY:1}); timeline.onComplete = prerenderPieceComplete; timeline.onCompleteParams = [s]; timeline.duration = 2;*/ rr++; } //historybmd.draw(holder); pinkFace.visible=false; //historybmd.draw(holder); //var tempbmd:BitmapData = new BitmapData(doelbreedte,doelhoogte,true,0xFFFFFF); //tempbmd.draw(holder); //historybmd = tempbmd.clone(); bmdarray.push(historybmd.clone()); } private function prerenderPieceComplete(e:Sprite):void{ holder.removeChild(e); piecesComplete++; if(piecesComplete == 360){ stage.removeEventListener(Event.ENTER_FRAME, prerender); enableTimer=false; //animationHolder.addChild(pinkFace); changeDisplays("Pre-rendering complete!","Enjoy the show!"); addChild(animationHolder); tijd = bmdarray.length; stage.addEventListener(Event.ENTER_FRAME, render); renderholder.addChild(animator); } if(piecesComplete<360){ changeDisplays('Pre-rendering animation','Progress: '+ Math.round((rr/360)*100)+"%"); } } private function render(e:Event):void{ if(myrr 1000) { var fps:uint = Math.round(frames / delta * 1000); txtFPS.text = fps + "fps"; frames = 0; last = now; } } } }