2010-03-25 4 views
0

Comment attacher des symboles à partir d'un fichier .swf dans la partie Actionscript du fichier Flex3?Association de ressources .swf à Flex3 en appelant getDefinitionByName()

J'ai préparé un cas de test simple démontrant mon problème. Tout fonctionne (il y a des icônes sur les 4 boutons, il y a un cercle rouge) - sauf la partie getDefinitionByName().

Ma cible consiste à attacher un symbole de la bibliothèque de façon "dynamique", c'est-à-dire en fonction de la valeur de la variable de combinaison au moment de l'exécution.

Symbols.as:

package { 
    public class Symbols { 
     [Embed('../assets/symbols.swf', symbol='spades')] 
     public static const SPADES:Class; 

     [Embed('../assets/symbols.swf', symbol='clubs')] 
     public static const CLUBS:Class; 

     [Embed('../assets/symbols.swf', symbol='diamonds')] 
     public static const DIAMONDS:Class; 

     [Embed('../assets/symbols.swf', symbol='hearts')] 
     public static const HEARTS:Class; 
    } 
} 

TestCase.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    creationComplete="onCreationComplete();"> 
    <mx:Script> 
     <![CDATA[ 
      private function onCreationComplete():void 
      { 
       var sprite:Sprite = new Sprite(); 
       var g:Graphics = sprite.graphics; 

       g.lineStyle(1, 0xFF0000); 
       g.beginFill(0xFF0000); 
       g.drawCircle(100, 100, 20); 
       g.endFill(); 

        spriteHolder.addChild(sprite); 

       // XXX stuff below not working, can it be fixed? 
        var suit:String = "SPADES"; 
        var mc:MovieClip = new (getDefinitionByName("Symbols.SPADES") as Class); 
        spriteHolder.addChild(mc); 
      } 
     ]]> 
    </mx:Script> 
    <mx:VBox width="100%">  
     <mx:Button label="1" icon="{Symbols.SPADES}" /> 
     <mx:Button label="2" icon="{Symbols.CLUBS}" /> 
     <mx:Button label="3" icon="{Symbols.DIAMONDS}" /> 
     <mx:Button label="4" icon="{Symbols.HEARTS}" /> 
     <mx:UIComponent id="spriteHolder" width="200" height="200"/>  
    </mx:VBox> 
</mx:Application> 
+0

Vous devez peut-être consulter ApplicationDomain http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/system/ApplicationDomain.html – danjp

Répondre

1

aller juste avec Symbols[suit]. object[expression] est équivalent à object.ident si String(expression) est évalué à "ident".

Questions connexes