0

非常に単純なコードで、Flex 4.6で発生している非常に奇妙なバグです。

for ( var j=0 ; j< chip_num; j++)
{

isoChip = new IsoChip();

//isoChip.type=(IsoChip.YELLOW_CHIP); //<<<<<<<<<DOESNOT WORK HERE
isoChip.scaleX = isoChip.scaleY=1//0.45 ; 
isoChip.x= i + 10 * i + 5 ;

isoChip.y= y_num;

addElement(isoChip);


isoChip.type=(IsoChip.YELLOW_CHIP);  //<<<<<<<<<<<<<<WORKS HERE ONLY

y_num = y_num - 2.5 //IsoChip.height ; 

}

このコンポーネントを持つ:IsoChip.mxmlコンポーネント

    <?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" width="23" height="20" initialize="init()">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[

            public static const BLUE_CHIP:String = "blueChip" ;
            public static const BLACK_CHIP:String = "blackChip" ;
            public static const YELLOW_CHIP:String = "yellowChip" ;

            public function init(type_val_str="blueChip") 
            {
                blueChip.visible= false; 
                blackChip.visible =false ;
                yellowChip.visible = false ;

                //type = type_val_str  ;


            }

            function set type(type_val_str:String)
            {

                switch( type_val_str)
                {
                    case  IsoChip.BLUE_CHIP:
                        trace(">",IsoChip.BLUE_CHIP)
                        blueChip.visible = true; 
                        blackChip.visible = false ; 
                        yellowChip.visible = false ; 

                    break; 

                    case  IsoChip.BLACK_CHIP:

                        trace(">",IsoChip.BLACK_CHIP)

                        blueChip.visible = false ; 
                        blackChip.visible = true ; 
                        yellowChip.visible = false ;


                    break;

                    case  IsoChip.YELLOW_CHIP:

                        trace(">",IsoChip.YELLOW_CHIP)
                        blueChip.visible = false; 
                        blackChip.visible = false ; 
                        yellowChip.visible = true; 

                    break; 


                }

            }



        ]]>
    </fx:Script>



    <s:SWFLoader id="blueChip" x="0" y="0"  width="23" height="20" source="../swf/blue-iso-chip.swf"/>
    <s:SWFLoader id="yellowChip" x="-16" y="5"  width="23" height="20" source="../swf/yellow-iso-chip.swf"/>
    <s:SWFLoader id="blackChip" x="4" y="9" width="23" height="20" source="../swf/black-iso-chip.swf"/>
</s:Group>

それは本当にバグですか?それとも私は何か間違ったことをしていますか??

4

1 に答える 1

3

ここでは可視性の代わりに状態を使用することをお勧めします。

したがって、グループで 3 つの状態を宣言します。

<s:states>
    <s:State name="blue" />
    <s:State name="black" />
    <s:State name="yellow" />
</s:states>

次に、各 SWFLoader に各状態を適用します。

<s:SWFLoader id="blueChip" includeIn="blue" ... />
<s:SWFLoader id="blackChip" includeIn="black" ... />
<s:SWFLoader id="yellowChip" includeIn="yellow" ... />

最後に、ActionScript コードで、条件に基づいて状態を変更します。

switch( type_val_str) {
    case  IsoChip.BLUE_CHIP:
        currentState = "blue";
    break; 

    case  IsoChip.BLACK_CHIP:
        currentState = "black";
    break;

    case  IsoChip.YELLOW_CHIP:
        currentState = "yellow";
    break; 
}
于 2012-10-07T17:35:55.600 に答える