2012-12-05 46 views
0

我想創建一個匹配的遊戲,其中數組hitBoxes中的一個對象匹配到數組hitBoxes2中的一個對象。我試圖將實例名稱轉換爲一個字符串,然後使用子字符串方法來匹配實例名稱中的最後一個數字,如果匹配成功的話。現在我收到錯誤子串從數組as3 **錯誤#1009:無法訪問屬性或方法的空對象引用

TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法。 at MethodInfo-499()

我想知道是否有人可以幫助我。謝謝!

  var left:String; 
      var correct:MovieClip = new Correct; 
      var isClicked:Boolean = false; 
      var leftClicked:int = 0; 

      p3.nextPage.buttonMode = true; 
      p3.nextPage.addEventListener(MouseEvent.CLICK, nextPage); 

      function nextPage(MouseEvent):void{ 
       removeChild(p3); 
      } 

      var hitBoxes:Array = [p3.a1, p3.a2, p3.a3, p3.a4, p3.a5, p3.a6, p3.a7, p3.a8]; 
      var hitBoxes2:Array = [p3.b1, p3.b2, p3.b3, p3.b4, p3.b5, p3.b6, p3.b7, p3.b8]; 


      for (var h:int = 0; h < hitBoxes.length; h++){ 
       hitBoxes[h].buttonMode = true; 
       hitBoxes[h].addEventListener(MouseEvent.CLICK, matchingLeft); 
      } 

      for (var h2:int = 0; h2 < hitBoxes2.length; h2++){ 
       hitBoxes2[h2].buttonMode = true; 
       hitBoxes2[h2].addEventListener(MouseEvent.CLICK, matchingRight); 
      } 

      function matchingLeft(e:MouseEvent):void{ 
       var left = String(e.currentTarget.name); 
       isClicked = true; 
       trace(left); 
      } 

      function matchingRight(e:MouseEvent):void{ 
       var right:String = String(e.currentTarget.name); 
       trace(right); 
       if(isClicked == true && left.substring(3,3) == right.substring(3,3)){ 
        trace("matched"); 
       } 

      } 

回答

2

根據你的代碼變量「左」是在matchingRight方法無效,因爲matchingLeft使用名稱爲「左」的局部變量,而頂級「左」還是有它的默認值。

也String.substring方法使用不正確:

var name:String="p3.a1"; 
trace(name.substring(3, 3)); // this will always output empty string "" 
trace(name.substring(4, 5)); // this will output "1" string 

在結論我建議使用數組索引(整數),而不是串的當計算「匹配」的條件,子串操作和字符串比較是CPU密集。

相關問題