1

クイズが長いリストからランダムな回答セットを提示できるようにするには、actionscript コードをどのように変更すればよいでしょうか? たとえば、合計 12 の回答をフラグとして含む XML ファイルから 4 つのランダムな回答だけを提示するクイズを作成できますか?

12 の回答すべてを入れることができます。すべてのフラグが出てきます。質問テキスト フィールドには、それらのフラグの 1 つの名前である 1 つの質問ウィッチだけが表示されますが、ランダムに 4 つのフラグだけを取得して入れる方法がわかりません。ステージとテキスト フィールドの名前の 1 つ

XML の例:

 <flags>
    <flag path="../assets/flags/flag1.png">                             
         <country>
            Aeland               
         </country>
    </flag> 

    <flag path="../assets/flags/AmSamoa.png">                               
         <country>
            AmSamoa          
         </country>
    </flag>  

    <flag path="../assets/flags/Bahamas.png">                               
         <country>
            Bahamas              
         </country>
    </flag>   
    <flag path="../assets/flags/CostaRica.png">                             
         <country>
            Costa Rica               
         </country>
    </flag>   
    <flag path="../assets/flags/CotedIvorie.png">                               
         <country>
            Cotedivoire          
         </country>
    </flag>   
    <flag path="../assets/flags/Croatia.png">                               
         <country>
            Croatia              
         </country>
    </flag>   

私のAS3コードは次のとおりです。

private function onXMLLoad(event:Event):void
{           
    _xml = new XML(event.target.data); //create XML document_xmlLoader.removeEventListener(Event.COMPLETE, onXMLLoad);
    _myFlagList = new XMLList(_xml.flag);

    _xmlLoader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
    //  _xml.ignoreWhitespace = false;          
    // trace("MyFlag: _answers: ",_answers);          
    //trace(_loader);          
    //trace(targetBtn);
    //trace(_myFlagList);


    for each (var flagPath:XML in _xml.flag.@path) 
    {
        trace("MyFlag: flagaths: ",flagPath);
        _flagPaths.push(flagPath);
    }   


    for each (var flag:XML in _xml.flag.country)
    {       //trace("MyFlag: flagaths: ",flag);     
        _allFlags.push(flag);
    }

    createButtons();

}


private function onIOError(event:IOErrorEvent):void
{
    _xmlLoader.removeEventListener(Event.COMPLETE, onXMLLoad);
    _xmlLoader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
    trace('IO Error:', event.text);

}

private function createButtons():void
{


    var col:int;
    var row:int;    
    flagContainer = new Sprite(); 


    trace("Number of flags",_allFlags.length);


    for (var i:int = 0; i < NUMBER_OF_BTNS; i++) 
    {
        _answers.push(_allFlags[i]);

        targetBtn = new FlagButton(_allFlags[i],_flagPaths[i]);             
        targetBtn.x = col * (targetBtn.width + 10)+20;
        targetBtn.y = row * (targetBtn.height+ 10)+20;
        flagContainer.addChild(targetBtn);
        addChild(flagContainer);



        col++;

        if( col == 3)
        {
            col = 0;
            row++;
        }
    }



    randomOption(); 
}
private function randomOption():void
{


    trace("MyFlag: all flags: ", _allFlags);        

    flagToFind = _allFlags[Math.floor(Math.random() * _allFlags.length)];
    trace("MyFlag: flag to find: ", flagToFind);        

    _bk.text.text=flagToFind;

}
4

1 に答える 1

0

基本的に、オブジェクトの配列が必要です。おそらく、次のように XML でフラグを配置する方がよいでしょう。

<flag> 
     <path>../assets/flags/flag1.png</path> 
     <country>Aeland</country>
</flag> 

flagこれにより、反復可能な XML オブジェクトの配列が得られます。

配列からランダムに選択することについて - これは簡単な作業ですが、以前に選択したインデックスを選択していないことを確認してください。

var selected:Array=[];
while (selected.length<4) {
    var si:int=Math.floor(Math.random()*flags.length);
    if (selected.indexOf(si)==-1) selected.push(si);
}
trace(flags[selected[0]]); // first selected flag
trace(flags[selected[3]]); // fourth selected flag
于 2013-05-28T13:58:22.067 に答える