2011-04-03 80 views
0

我有一個動態添加到舞臺的數組(newStep)中的影片剪輯。每次添加實例時,它都會隨機選擇一個框架。有一個嵌套的影片剪輯(stepLine),我需要更改alpha的。此代碼實際上用於向動態文本框(pointsDText)添加字符串,但是當我嘗試訪問嵌套的影片剪輯(stepline)時,它會給我1009空對象引用錯誤。有趣的是代碼的實際工作,並確實改變了影片剪輯的alpha,但我仍然得到這個錯誤,我認爲這使得我的遊戲更加糟糕。我試過用if(包含(steps [r] .stepLine)),但它不起作用。有沒有更好的方式來訪問這個影片剪輯而不會出現錯誤?訪問數組中某個幀的影片剪輯as3

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

當您試圖訪問不指向任何對象的變量的屬性 - 空引用時,會發生空引用錯誤。您正在有效地嘗試訪問不存在的對象。例如,​​在其中一個實例中可能不存在,因此stepLine.alpha正在導致該錯誤。 (您如何設置不存在剪輯的Alpha?)也許steps[r]剪輯位於尚未有任何​​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; 
      } 
     } 
    } 
} 
+0

修復了它。非常感謝! – user674528 2011-04-03 14:30:37