AS3新手在这里。希望我正确地解决问题。
背景 我有一个名为MultipleChoiceQuestion的类,它从xml文件中提取词干和选项。每个问题的选择都是随机的。 Quiz类有一组指定的多项选择问题,它会动态加载。它还引用xml文件来确定问题的数量。测验基于正确答案控制问题进展。主要电影在适当的时间启动测验。
问题 我希望问题构建是动态的,并加载选择并随机化它们。我该怎么做呢?现在我将测验作为swf发布,然后将其加载到主电影中,但这是静态的,并且总是以相同的顺序具有相同的选择。我怎么能动态地这样做? 在此先感谢您的帮助!
答案 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结构。
我只能在这里猜测,因为我没有完整的应用程序概述。