我有一个数组(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;
}
}
}
这很难解释,但我希望你理解。
非常感谢。
答案 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;
}
}
}
}