FLA files

Monkey Targets Forums/Flash/FLA files

siread(Posted 2012) [#1]
I notice that a lot of Flash sites request that you include their own start-up animations. These are generally .fla animation files. Has anyone tried incorporating something like this? Maybe by building it as a swf first, then building in FlashBuilder?


siread(Posted 2012) [#2]
Ok, I've managed to implement the intro animations into my pre-loader. First I had to build the FLA in CS4, making sure I added enough frames to the main layer (so that actual number of frames in Layer 1 matched the number of frame in the animations included within Layer 1 - I'm not really sure of the correct terminology here!)

Then put a stop(); command in the very last keyframe on Layer 1 (otherwise the anim will loop and play sound even beyond the life of the preloader). Now publish the intro as a swf.

Create a FlashBuilder project out of your MonkeyGame.as and data. Pop the swf in your src folder, allow with a background image if you wish. Create a new file in the project called Preloader.as and use this code:

// My preloader
package 
{
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	import flash.utils.getDefinitionByName;
	
	[SWF(width = "640", height = "480")]
	
	public class Preloader extends MovieClip 
	{
		[Embed(source = 'bg.png')] private const PICTURE:Class;		// PUT YOUR BACKGROUND IMAGE HERE
		[Embed(source = 'intro_logo.swf')] private var MOVIE:Class;	// CHANGE INTRO ANIM HERE
		
		privateprivate var myPicture:Bitmap = new PICTURE;
		private var myMovie:MovieClip = new MOVIE;

		private const allowedSite:String = "newstarsoccer.com";		// SITE LOCK HERE

		private var loader:Sprite = new Sprite();
		private const loaderColor:uint = 0xffffff;
		private var loaded:Number = 0;
		private var introdone:Boolean = false;
		private var count:int;
		
		public function Preloader() 
		{			
			// loader information
			stage.addEventListener(Event.ENTER_FRAME, progress);
			myMovie.addEventListener(Event.ENTER_FRAME, handleFrame);
			
			addChild(myPicture);
			addChild(myMovie);
			
			// SET THE POSITION OF YOUR ANIMATION
			myMovie.scaleX = stage.stageWidth / myMovie.width;
			myMovie.scaleY = myMovie.scaleX;
			myMovie.x = 0 - (((myMovie.width * myMovie.scaleX) - stage.stageWidth) / 2);
			myMovie.y = 120;
			
			// show loader
			addChild(loader);
			loader.x = 0;
			loader.y = stage.stageHeight - 32;
		}
		
		private function progress(e:Event):void 
		{			
			// how much we've loaded thus far
			loaded = loaderInfo.bytesLoaded / loaderInfo.bytesTotal;
			
			// update loader graphic
			loader.graphics.clear();
			loader.graphics.beginFill(loaderColor);
			loader.graphics.drawRect(0, 0, loaded * stage.stageWidth, 32);
			loader.graphics.endFill();
			
			// done loading?
			if (loaderInfo.bytesLoaded >= loaderInfo.bytesTotal && introdone == true)
			{
				startup();
			}
		}

		private function handleFrame(e:Event):void 
		{
			count += 1;

			if (count >= 150)	// CHANGE INTRO LENGTH (Num of frames in intro swf)
			{
				introdone = true;
				
				if (loaderInfo.bytesLoaded >= loaderInfo.bytesTotal)
				{
					startup();
				}
			}
		}
		
		private function startup():void 
		{
			// remove event listener(s)
			stage.removeEventListener(Event.ENTER_FRAME, progress);
			myMovie.removeEventListener(Event.ENTER_FRAME, handleFrame);
			
			// hide loader
			stop();
			
			// remove all the children
			var i:int = numChildren;
			
			while (i --)
			{
				removeChildAt(i);
			}
			
			// site lock
			if (this.root.loaderInfo.url.indexOf(allowedSite) == -1)
			{
				return;
			}
			
			// go to the main class
			var mainClass:Class = getDefinitionByName("MonkeyGame") as Class;
			parent.addChild(new mainClass as DisplayObject);
			
			// remove self
			parent.removeChild(this)
		}
		
	}
	
}


Then in MonkeyGame.as add this line after [SWF(width="640",height="480")]:

[Frame(factoryClass="Preloader")]


Build in FlashBuilder and find your new swf in the bin folder.