# Trying to solve the preloader issues in AS3

**URL:** <https://forum.kirupa.com/t/trying-to-solve-the-preloader-issues-in-as3/229972>\
**Category:** flash\
**Created:** [June 21, 2007, 6:07pm UTC](https://forum.kirupa.com/t/trying-to-solve-the-preloader-issues-in-as3/229972 "2007-06-21T18:07:52Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![arckodrazen](https://avatars.discourse-cdn.com/v4/letter/a/e95f7d/32.png) [@arckodrazen](https://forum.kirupa.com/u/arckodrazen)\
**Post date:** [June 21, 2007, 6:07pm UTC](https://forum.kirupa.com/t/trying-to-solve-the-preloader-issues-in-as3/229972/1 "2007-06-21T18:07:52Z")

</div>

Hi guys

I’m trying to make a preloader for my Flash movie that starts from zero percentage without using two flash files.  
I tried to follow this solution: [http://www.bit-101.com/blog/?p=946](http://www.bit-101.com/blog/?p=946) but I can’t seem to get it to work. It always fails at runtime (not at compiletime). The runtime debugger throws this error (the first line is a trace I manually put in, code at end of this post):

```auto

FrameTest Constructor
TypeError: Error #1007: Instantiation attempted on a non-constructor.
    at FrameTest/init()
    at FrameTest$iinit()

```

Is this error a result of the “Embed(source)” tag?  
Why is the Factory never called?

You’ll notice that I’ve put some traces in the code to see where it exactly crashes.

Here is what I did:

- I’ve set my document class to: FrameTest class which is in the same directory as my .fla
- Code of the two classes used (thanks to bit-101):

```auto

package {
    import flash.display.Sprite;
    import flash.display.Bitmap;

    [Frame(factoryClass="com.arckodrazen.MyFactory")]
    public class FrameTest extends Sprite {

        [Embed(source="big_asset.jpg")]
        private var Asset:Class;
    
        public function FrameTest() {
            trace("FrameTest Constructor");
            init();
        }
    
        public function init():void {
            var asset:Bitmap = new Asset();
            addChild(asset);
        }
    }
}

```

```auto

package com.arckodrazen {
    import flash.display.DisplayObject;
    import flash.display.MovieClip;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.utils.getDefinitionByName;

    public class MyFactory extends MovieClip {
        
        public function MyFactory() {
            trace("MyFactory Constructor");
            stop();
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }

        public function onEnterFrame(event:Event):void {
            trace("MyFactory onEnterFrame");    
            graphics.clear();
            if(framesLoaded == totalFrames) {
                removeEventListener(Event.ENTER_FRAME, onEnterFrame);
                nextFrame();
                init();
            } else {
                var percent:Number = root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal;
                graphics.beginFill(0);
                graphics.drawRect(0, stage.stageHeight / 2 - 10,
                stage.stageWidth * percent, 20);
                graphics.endFill();
            }
        }
    
        private function init():void {
            var mainClass:Class = Class(getDefinitionByName("FrameTest"));
            if(mainClass){
                var app:Object = new mainClass();
                addChild(app as DisplayObject);
            }
        }
    }
}

```

Thanks for any responses in advance.  
Arcko Drazen
