代码之家  ›  专栏  ›  技术社区  ›  Alexander Farber

通过调用getDefinitionByName()将.swf资产附加到Flex3

  •  0
  • Alexander Farber  · 技术社区  · 16 年前

    如何从flex3文件的actionscript部分的.swf文件附加符号?

    我准备了一个简单的测试用例来演示我的问题。一切正常(4个按钮上有图标,还有一个红色圆圈)-除了getDefinitionByName()部分。

    我的目标是“动态地”附加库中的一个符号,即取决于运行时suit变量的值。

    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;
        }
    }
    

    测试用例.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>
    
    1 回复  |  直到 10 年前
        1
  •  1
  •   Taryn Frank Pearson    12 年前

    随随便便 Symbols[suit] . object[expression] 相当于 object.ident 如果 String(expression) 评估为 "ident" .