【问题标题】:Clearing my array leaves blank array positions清除我的数组会留下空白数组位置
【发布时间】:2014-06-13 17:54:23
【问题描述】:

所以我遇到了一个 AS3 类的问题,它没有按照我需要的方式运行。这是一个简单的问题,但导致它的方法很复杂。

首先,我正在构建的“测验”有 6 个问题作为外部 SWF 加载到 Shell 内,由一个类运行。首先,我们声明了一个 var "a_quiz" 来保存从外部 SWF 推送的 6 个值。这 6 个值被简化为一个字符串,然后检查另一个包含正确答案的数组。以下 loadQuiz 函数旨在启动三个随机测验之一并清除 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');
}

【问题讨论】:

  • 您能否显示将值推送到a_quiz 的代码?
  • 代码已经在上面了。
  • 没关系,我们找到了解决方案!
  • 请发布解决方案,以便每个人都能从您的经验中受益
  • a_quiz.length = 0; 不会清除任何内容,它只是将数组的长度更新为变量以使其他代码元素受益(例如:For LoopsIf/Else 等)。要创建一个新的空数组,只需执行以下操作:a_quiz = new Array();

标签: arrays actionscript-3


【解决方案1】:

问题源于测验本身的加载。

正如你在 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);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2020-09-17
    • 2014-02-24
    • 1970-01-01
    • 2016-10-29
    相关资源
    最近更新 更多