0
votes

I m trying to setup assetManager in Starling. But i get the runtime error:

Texture cannot be null at starling.display::Image()[C:\lars\starling\starling\src\starling\display\Image.as:70] at Game()[C:\lars\onkel_reje_air_3\src\Game.as:41] at starling.core::Starling/initializeRoot()[C:\lars\starling\starling\src\starling\core\Starling.as:338] at starling.core::Starling/initialize()[C:\lars\starling\starling\src\starling\core\Starling.as:314] at starling.core::Starling/onContextCreated()[C:\lars\starling\starling\src\starling\core\Starling.as:519]

I having the following EmbeddedAssets.as:

package  
{
        import starling.display.Image;
    import starling.textures.Texture;
    /**
     * ...
     * @author Lars Gregersen
     */
    public class EmbeddedAssets 
    {

        [Embed(source="assets/bord.jpg")]
        public static const bord:Class;

    }

}

And in my game.as:

package  
{
import starling.display.Sprite;
import starling.display.MovieClip;
import starling.display.Image;
import starling.events.Event;
import starling.text.TextField;
import starling.textures.Texture;
import starling.utils.AssetManager;


    /**
     * ...
     * @author Lars Gregersen
     */
    public class Game extends Sprite
    {

public var assets:AssetManager = new AssetManager();

 public function Game(){


    assets.verbose = true;
    assets.enqueue(EmbeddedAssets);



        var backgroundImage:Image = new Image(assets.getTexture("bord"));
        addChild(backgroundImage);


        assets.loadQueue(function(ratio:Number):void{
    trace("Loading assets, progress:", ratio);

    if (ratio == 1.0)

});


        }//end constructor




    }//end class

}//end package

And my Main.as:

package 
{
    //import flash.desktop.NativeApplication;
    import flash.events.Event;
    import flash.display.Sprite;
    import starling.core.Starling;



    /**
     * ...
     * @author Lars Gregersen
     */
    public class Main extends Sprite
    {
         private var _starling:Starling;
        public function Main():void 
        { 
        _starling = new Starling(Game, stage);
         _starling.showStats = true;

        _starling.start();

        }



    }

}

I have my assets folder and .as files in the same folder (src). Using Flashdevelop. It should be that simple but ...

2

2 Answers

3
votes

It's because you call the method 'getTexture' too early. Call this method only when the assets have been loaded.

public function Game(){

    assets.verbose = true;
    assets.enqueue(EmbeddedAssets);

    assets.loadQueue(function(ratio:Number):void{

        trace("Loading assets, progress:", ratio);
        if (ratio == 1.0)
        {
            var backgroundImage:Image = new Image(assets.getTexture("bord"));
            addChild(backgroundImage);
        }

    });

}//end constructor
0
votes

I think you need one more step, your asset class should return the bitmapdata of the texture :

var cls:Class = getDefinitionByName('bord') as Class; var bm:BitmapData = new cls(0,0);