Search code examples
actionscript-3apache-flexair

Adobe AIR getQualifiedDefinitionNames


I have a problem with getQualifiedDefinitionNames, when I compile with AIR 20 I get

Main gameBg_png$c19135a2672bad8837da970f47c7278f-30390368

and when I compile with Apach Flex 4.15.0 or Adobe Animate CC it returnes everything as expected!

Main Main__gamebg

how to fix it with AIR, that it returned Main__gamebg class?

my sample code:

package{
   import flash.display.MovieClip;  
   import flash.events.Event;  

   public class Main extends MovieClip {  

   [Embed(source="../assets/gameBg.png")]  

   public const _gamebg:Class;  

  public function Main() {  
    super();  
    if (stage) init();  
    else addEventListener(Event.ADDED_TO_STAGE, init);  
  }  

 private function init(e:Event = null):void {  

     removeEventListener(Event.ADDED_TO_STAGE, init);  
     var definitions:*;  
     if (this.loaderInfo.applicationDomain.hasOwnProperty("getQualifiedDefinitionNames")) {  
       definitions = this.loaderInfo.applicationDomain["getQualifiedDefinitionNames"]();  
       for (var i:int = 0; i < definitions.length; i++) {  
           trace(definitions[i])  
       }  
      }  
    }  
  }  
}

Solution

  • http://forum.starling-framework.org/topic/getqualifieddefinitionnames-porblem?replies=5#post-90611

    this trick works.

    ///////////////
    // SomeImage.as
    ///////////////
    [Embed(source="someimage.png")] 
    public class SomeImage extends Bitmap{
    public function get dimensions(): String{
        return width + "x" + height;}
    }
    
    /////////////
    // MyClass.as
    /////////////
    public class MyClas{
       public function foo(): void{
         // Instantiate the bound class to get the embedded image
         var someImage:SomeImage = new SomeImage();
    
         // ... do whatever you'd like with someImage
         trace("Dimensions: " + someImage.dimensions);
       }
    }