动态加载嵌套swfs

时间:2011-12-12 16:31:55

标签: flash actionscript-3

AS3新手在这里。希望我正确地解决问题。

背景 我有一个名为MultipleChoiceQuestion的类,它从xml文件中提取词干和选项。每个问题的选择都是随机的。 Quiz类有一组指定的多项选择问题,它会动态加载。它还引用xml文件来确定问题的数量。测验基于正确答案控制问题进展。主要电影在适当的时间启动测验。

问题 我希望问题构建是动态的,并加载选择并随机化它们。我该怎么做呢?现在我将测验作为swf发布,然后将其加载到主电影中,但这是静态的,并且总是以相同的顺序具有相同的选择。我怎么能动态地这样做? 在此先感谢您的帮助!

Heres a visual in UML

1 个答案:

答案 0 :(得分:0)

为什么不创建一个带有answers属性的Question类,该属性可以包含数组中所有可能的答案?

然后,您可以通过随机因素查询数组来随机化可能的答案。

通过这种方式,您不必继续查询XML,您最终会得到一组问题,这些问题可以在您调用randomAnswers方法时随时生成自己的倍数选项。

   //In your Question class

   private var answers:Array;
   private var questionText:String;
   private var currentQuestions:Array;

   private function init():void
   {
        //Populate answers & questionText from the XML data
        // Then set your current choice of questions
        loadXML(xmlURL); // results in xmlLoaded...
   }

   private function xmlLoaded( event:Event ):void
   {
        //If you need 4 different answers
        currentQuestions = randomAnswers(4 );
   }

   // Set the number of answers required as a parameter
   private function randomAnswers( numAnswer:int ):Array
   {
        //The Array holding the set of random answers
        var ans:Array = [];

        //i've kept this basic for simplicity's sake
        //but you could remove a question that's already been stored
        //in order not to end up in some infinite loop...
        for( var i:int ; i < answers.length; ++i )
        {
              //set a random integer
              var rand:int = Math.random() * answers.length;

              //if the answer is not already stored, add it
              if( ans.indexOf( answers[rand] ) == -1 )
                 ans.push( answers[rand] );
              else // otherwise try again
                --i;
        }

        return ans;
    }

如果不完全改变游戏结构,应该可以实现由用户输入触发的随机化功能,即MouseEvent或任何触发你所指的幻灯片的事件......

另一方面,我从您的描述中得到的印象是您的设计与您的内容紧密相关,这可能是您问题的根源。

如果是这种情况,应该可以创建包含所有XML数据的对象(问题类)(幻灯片,答案等...)并实现随机化显示的数据的方法。

为了实现这一点,您需要将XML数据加载到这些对象中,加载的顺序可能甚至不相关......这个想法是您不应该完全依赖于XML结构。

我只能在这里猜测,因为我没有完整的应用程序概述。