【问题标题】:Dynamic loading of nested swfs嵌套 swf 的动态加载
【发布时间】:2011-12-12 16:31:55
【问题描述】:

这里是 AS3 新手。希望我的问题是正确的。

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

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

Heres a visual in UML

【问题讨论】:

  • 您能给我们看一些您的 XML 解析器的代码吗?从数据中生成选择的部分。

标签: flash actionscript-3


【解决方案1】:

为什么不创建一个带有 answers 属性的 Question 类,它将所有可能的答案保存在一个数组中?

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

这样,您不必一直查询 XML,您最终会得到一组 Questions,它们可以在您调用 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 结构。

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

【讨论】:

  • PatrickS:感谢您的回答和编码。我有一个用于随机化的 shuffleArray 函数。我的问题是随机化只在我发布测验时发生一次,但我需要它在加载主电影时是动态的。公共函数 shuffleArray(passedArray:Array):Array { var arrayLength:Number = passedArray.length - 1; for (var i:int = 0; i
  • 抱歉,我无法回答自己的问题,也无法在评​​论中添加代码。
  • 重点不在于 shuffle 功能,而是在加载 xml 数据后将问题作为类加载的可能性。每个问题都有自己的可能答案,您可以随时通过调用方法来打乱这些答案。
  • 对我的误解表示歉意。我想这就是我迷失的地方是将问题作为类加载。不知道该怎么做。
  • 您创建一个 Question 类,其中至少有一个变量来保存问题文本和一个 Array 或 Vector 来保存多项选择。当您加载 XML 数据时,只需解析 XML 并创建一堆可以保存在 Vector 中的问题。在此之后,您可以停止查询您的 XML 并以您希望的任何顺序简单地操作问题,并在您希望的任何时候调用答案的 shuffle 方法。
猜你喜欢
  • 2012-03-31
  • 2016-08-31
  • 1970-01-01
  • 2021-09-08
  • 2012-09-10
  • 1970-01-01
  • 2020-09-22
  • 2019-07-11
  • 2011-10-01
相关资源
最近更新 更多