访问数组as3中某个帧上的影片剪辑

时间:2011-04-03 13:26:03

标签: arrays actionscript-3 nested movieclip

我有一个数组(newStep)中的影片剪辑正在动态添加到舞台上。每次添加实例时,它都会随机选择一个框架。有一个嵌套的影片剪辑(stepLine),我需要更改其alpha。此代码实际上用于将字符串添加到动态文本框(pointsDText),但是当我尝试访问嵌套的影片剪辑(stepLine)时,它给出了1009空对象引用错误。有趣的是代码实际上工作,并确实改变了影片剪辑的alpha,但我仍然得到了这个错误,我认为这让我的游戏变得更加微不足道。我尝试过使用if(contains(r [。] .stepLine))但它不起作用。有没有更好的方法来访问此影片剪辑而不会收到错误?

if(newStep != null){
    for(var r:int = 0; r<steps.length;r++){
        if(steps[r].currentLabel == "points"){
            steps[r].pointsDText.text = String(hPoints);
        }
        if(steps[r].currentLabel == "special"){
            steps[r].stepLine.alpha = sStepAlpha;   
        }
        if(steps[r].currentLabel == "life"){
            steps[r].stepLine.alpha = hStepAlpha;
        }
    }
}

这很难解释,但我希望你理解。

非常感谢。

1 个答案:

答案 0 :(得分:0)

当您尝试访问未指向任何对象的变量的属性时,会发生空引用错误 - 空引用。您正在有效地尝试访问不存在的对象。例如,其中一个实例中可能不存在stepLine,因此stepLine.alpha导致错误。 (如何设置不存在的剪辑的alpha?)可能steps[r]剪辑位于没有stepLine MovieClip的帧上。

您应该在Flash IDE中按Ctrl + Shift + Enter以调试模式运行影片。这应该显示导致错误的确切行,并且它将允许您检查该点处的任何变量的值。这应该可以帮助您追踪问题。同样,您可以使用trace语句来帮助调试。例如,您可以trace(steps[r].stepLine);检查空值,甚至只是if(!steps[r].stepLine) trace("ERROR");。此外,如果将访问包装在if语句中,则可以避免出现空引用错误,即使这并未真正解决根本问题:

if(newStep != null){
    for(var r:int = 0; r<steps.length;r++){
        // only touch things if the movieclip actually exists
        if(steps[r] && steps[r].stepLine){
            if(steps[r].currentLabel == "points"){
                steps[r].pointsDText.text = String(hPoints);
            }
            if(steps[r].currentLabel == "special"){
                steps[r].stepLine.alpha = sStepAlpha;   
            }
            if(steps[r].currentLabel == "life"){
                steps[r].stepLine.alpha = hStepAlpha;
            }
        }
    }
}