Проблема с отображением кода AS3 во Flex - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть скрипт AS3 bitfade.text.steel, возвращающий тип Sprite.Он работает в среде Flash, но не в FLEX.Во Flex это ничего не отображает.Ошибки не появляются.Похоже, прикрепленный код также работает.Я использую Flex SDK 4.5

Не могли бы вы подсказать, в чем может быть проблема с этим кодом?

Английский не мой родной языкЕсли есть какие-либо ошибки, пожалуйста, исправьте меня.

Крис

<?xml version="1.0" encoding="utf-8"?>                                                                              
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"                                                     
                xmlns:s="library://ns.adobe.com/flex/spark"                                                         
                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"                            
                creationComplete="creationComplete();" >                                                            
    <fx:Declarations>                                                                                               
        <!-- Place non-visual elements (e.g., services, value objects) here -->                                     
    </fx:Declarations>                                                                                              
    <fx:Script>                                                                                                     
        <![CDATA[                                                                                                   
            import bitfade.text.steel;                                                                              
            import flash.display.Sprite;                                                                            
            import mx.core.UIComponent;                                                                             

            function creationComplete(){                                                                            
                var textSteel = new steel("config.xml");                                                            
                if(textSteel is Sprite){                                                                            
                    trace("it is a sprite");                                                                        
                }                                                                                                   
                //var textSteelName:String = getQualifiedClassName(textSteel);                                      
                //trace(textSteelName);                                                                             
                textSteel.x = 150;                                                                                  
                trace("this is visible on the screen");                                                             
                var sprite:Sprite = new Sprite();                                                                   
                sprite.graphics.beginFill(0xFFCC00);                                                                
                sprite.graphics.drawCircle( 40, 40, 40 );                                                           
                sprite.graphics.endFill();                                                                          

                var wrapper:UIComponent = new UIComponent();                                                        
                wrapper.addChild(sprite);                                                                           
                wrapper.addChild(textSteel);                                                                        
                animationStage.addElement(wrapper);                                                                 
            }                                                                                                       
        ]]>                                                                                                         
    </fx:Script>                                                                                                    
    <s:Group id="animationStage" visible="true" x="50" y="50">                                                      
        <s:Label text="test">                                                                                       

        </s:Label>                                                                                                  
    </s:Group>                                                                                                      
</s:WindowedApplication>                                                                                            

Ответы [ 2 ]

3 голосов
/ 24 сентября 2011

Если я переключу ваш пользовательский класс на Sprite и нарисую что-нибудь на нем, он появится. Поэтому я считаю, что в вашем классе стали есть ошибка. Спрайт не будет иметь никакого размера, пока что-то не окажется внутри него с размером. Там нет указания кода, который вы показали, что происходит внутри вашего класса стали.

Мой образец:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="creationComplete();">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <fx:Script>                                                                                                     
        <![CDATA[                                                                                                   
//          import bitfade.text.steel;                                                                              
            import flash.display.Sprite;

            import mx.core.UIComponent;                                                                             

            public function creationComplete():void{                                                                            
                var textSteel : Sprite = new Sprite();                                                            
                if(textSteel is Sprite){                                                                            
                    trace("it is a sprite");                                                                        
                }                                                                                                   

                //var textSteelName:String = getQualifiedClassName(textSteel);                                      
                //trace(textSteelName);                                                                             
                textSteel.x = 150;                                                                                  

                // JH Code added new
                textSteel.graphics.beginFill(0xFFCC00);                                                                
                textSteel.graphics.drawRect(0,0,100,100);                                                           
                textSteel.graphics.endFill();                                                                          

                trace("this is visible on the screen");                                                             
                var sprite:Sprite = new Sprite();                                                                   
                sprite.graphics.beginFill(0xFFCC00);                                                                
                sprite.graphics.drawCircle( 40, 40, 40 );                                                           
                sprite.graphics.endFill();                                                                          

                var wrapper:UIComponent = new UIComponent();                                                        
                wrapper.addChild(sprite);                                                                           
                wrapper.addChild(textSteel);                                                                        
                animationStage.addElement(wrapper);                                                                 
            }                                                                                                       
        ]]>                                                                                                         
    </fx:Script>                                                                                                    
    <s:Group id="animationStage" visible="true" x="50" y="50">                                                      
        <s:Label text="test">                                                                                       

        </s:Label>                                                                                                  
    </s:Group>      

</s:WindowedApplication>
0 голосов
/ 24 сентября 2011

Я думаю, вам нужно установить ширину и высоту wrapper экземпляра UIComponent.

UIComponents не изменяют размер своего контента автоматически, поэтому он отображается с шириной и высотой 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...