所以我遇到的问题是AS3类没有以我需要的方式运行。这是一个简单的问题,但却是导致它的一组复杂方法。
首先,我正在构建的'测验'有6个问题作为外部SWF加载到Shell中,由一个类运行。首先,我们声明var“a_quiz”来保存从外部SWF推送的6个值。将这6个值缩减为字符串,然后针对包含正确答案的另一个数组进行检查。以下loadQuiz函数旨在启动三个随机quizes中的一个并清除a_quiz数组,以便它可以获得新的答案:
public function loadQuiz():void {
a_quiz.length=0;
trace("loadQuiz");
n_quizCorrect = n_quizScore = 0;
n_currentQuiz = Math.floor(Math.random() * (n_totalTopics - n_quizStart + 1) + n_quizStart);
loadTopic(n_currentQuiz);
}
现在我测试了Shell,并确认每次都会触发跟踪“loadQuiz”。第一次加载测验时,一切都表现得应有尽有。这6个问题跟踪正确或不正确的响应,并将6个二进制值推入a_quiz数组。输出如下:
loadQuiz
incorrect
correct
incorrect
incorrect
incorrect
incorrect
0,1,0,0,0,0
you failed
然后我跳回主菜单再次启动。这将再次部署loadQuiz函数。函数的第一行:
a_quiz.length=0;
应该清空a_quiz数组以接受新标记的答案。但是当我完成测验时,我得到了这个:
loadQuiz
correct
correct
correct
correct
correct
correct
,,,,,,1,1,1,1,1,1
you failed
由于某种原因,我的理解不多,推送值堆叠在空位置的顶部,因此当字符串比较时......它们将不匹配。这是怎么回事?
推送功能:
function handleClick(evt:MouseEvent):void{
var tempCORRECT = a_answerSheet.toString();
var tempSELECTION = a_selected.toString();
//
if(tempSELECTION == tempCORRECT){
trace('correct');
parentObj1.a_quiz[ parentObj1.n_currentQuestion - 1 ] = 1;
}else{
trace('incorrect');
parentObj1.a_quiz[ parentObj1.n_currentQuestion - 1 ] = 0;
}
parentObj1.n_currentQuestion ++;
// GOTO NEXT SLIDE
parentObj1.LOADNEXT('up');
}
答案 0 :(得分:0)
问题起源于测验本身的加载。
正如您在handleClick函数中看到的那样:
parentObj.n_currentQuestion++
在parentObj的时间轴上增加了一个名为n_currentQuestion的整数变量。问题在于,当测验加载此函数时,测验如何记录n_currentQuestion:
public function loadQuiz():void {
a_quiz= [];
trace("loadQuiz");
n_quizCorrect = n_quizScore = 0;
n_currentQuiz = Math.floor(Math.random() * (n_totalTopics - n_quizStart + 1) + n_quizStart);
loadTopic(n_currentQuiz);
}
因此,为了纠正错误,我需要在loadQuiz中添加一行,以便在n_currentQuestion设置为1时始终加载。
public function loadQuiz():void {
a_quiz= [];
n_currentQuestion = 1;
trace("loadQuiz");
n_quizCorrect = n_quizScore = 0;
n_currentQuiz = Math.floor(Math.random() * (n_totalTopics - n_quizStart + 1) + n_quizStart);
loadTopic(n_currentQuiz);
}