I have been trying to create a preloader for my flash app in pure action script. There is a feature in Flash Develop to create a project ‘actionsript 3 with preloader’.
Here is Preloader class:
package
{
import flash.display.Bitmap;
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.display.Shape;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.utils.getDefinitionByName;
import flash.display.StageScaleMode;
/**
* ...
* @author sasa
*/
public class Preloader extends MovieClip
{
[Embed(source = '../slike/loading.png')]
private var Slika:Class;
private var slika:Bitmap;
private var bar:Shape;
public function Preloader()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
slika = new Slika();
slika.alpha = 0.8;
addEventListener(Event.ENTER_FRAME, checkFrame);
loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
// show loader
addChild(slika);
slika.y = 250;
slika.x = 250 - slika.width / 2;
bar = new Shape();
bar.graphics.lineStyle(2, 0xFFFFFF, .75);
bar.graphics.drawRect(0, 0, 250, 25);
bar.y = 290;
bar.x = 250 - bar.width / 2;
bar.alpha = 0.3;
addChild(bar);
}
private function progress(e:ProgressEvent):void
{
trace('bio');
// update loader
bar.graphics.clear();
bar.graphics.lineStyle(2, 0xFFFFFF, .75);
bar.graphics.drawRect(0, 0, 250, 25);
bar.graphics.beginFill(0xFFFFFF, 1);
//bar.y += 2;
bar.graphics.drawRect(0, 0, (e.bytesLoaded / e.bytesTotal) * 250, 25);
/*
var i:int;
for (i = 0; i < 500; i++) {
trace(i);
}*/
}
private function checkFrame(e:Event):void
{
if (currentFrame == totalFrames)
{
removeEventListener(Event.ENTER_FRAME, checkFrame);
startup();
}
}
private function startup():void
{
/*
var i:int;
for (i = 0; i < 4000; i++) {
trace(i);
}*/
// hide loader
removeChild(slika);
removeChild(bar);
slika = null;
bar = null;
stop();
loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
var mainClass:Class = getDefinitionByName("Main") as Class;
addChild(new mainClass(this));
//addChild(new Main(this));
}
}
}
when i run my app. the progress function is called a few times while the app isn’t visible. and when the loading bar displays it’s always full.
And then i wait for the app to load and it starts after that.
It’s like the progress event isn’t giving me the progress of the rest of application, it’s like it’s giving me the progress of itself, so i can always see the bar only full.
I’ve been searching for a solution whole day. Please help out…