2013-04-22 52 views
-1

我試圖讓我的遊戲正常工作時,在我的代碼中不斷收到上面的錯誤消息。代碼如下,其中錯誤似乎正在發生,但我無法找到它;它帶來的錯誤是無法訪問空對象引用的屬性或方法。在blast_game/moveObjects()

無法訪問空對象引用的屬性或方法。在blast_game/moveObjects()

我的代碼:

public function moveObjects(e:Event) 
    { 
     for (var i:int=objects.length-1; i>=0; i--) 
     { 
      //code to increase speed of objects over time. 
      objects[i].y += speed; 
      if (objects[i].y > 400) 
      { 
       removeChild(objects[i]); 
       objects.splice(i,1); 
      } 
      //hit test for catcher - if any object hits the catcher 
      //increase or decrease score respectively. 
      if (objects[i].hitTestObject(catcher)) 
      { 
       //increase score when catcher catches "Good" object 
       if (objects[i].typestr == "good") 
       { 
        score += 10; 
       } 
       else 
       //decrease score if catcher catches "Bad" object. 
       { 
        score -= 5; 
       } 
       //prevents score from going below 0 
       if (score < 0) 
       { 
        score = 0; 
       } 
       scoreDisplay.text = "Score: " + score; 
       //once object hits catcher, remove object from                        stage. 
       removeChild(objects[i]); 
       objects.splice(i,1); 
      } 
      //if statement to move screen to promotion screen 
      //once score reaches past 100 
     if(score >= 100) { 
      var promotionScreen:promotion = new promotion(); 
      //stage.removeChild(this) 
      addChild(promotionScreen); 
      removeEventListener(Event.ENTER_FRAME, moveObjects); 
      promotionScreen = stage.stageWidth/2; 
      promotionScreen = stage.stageHeight /2; 


     } 
     //end of if statement 
     } 






     //sets catcher to work with mouse movement. 
     catcher.x = mouseX; 

    } 
} 
} 

惱人的事情是,它只顯示錯誤偶然,但即使它沒有,它仍然沒有彈出屏幕,它應該由於上面的代碼。

+0

至少,錯誤發生的行號會很有用。確保在CS6的「發佈設置」中啓用了「允許調試」。如果你沒有充分利用你所擁有的工具,你只會讓自己變得更加困難。 – prototypical 2013-04-22 19:21:10

回答

0

這意味着什麼是null。這是一個重複的問題。至少回答了50個這樣的問題。請了解錯誤的含義以及如何解決它在http://curtismorley.com/2007/08/15/flash-cs3-flex-error-1009-cannot-access-a-property-or-method-of-a-null-object-reference/,也許谷歌有點調試as3。如果你明白,它更有用,而不是要求其他人修復你的代碼。另外,在這個錯誤中,堆棧跟蹤(以及錯誤所在的行)非常重要,因爲那裏的東西是空的。

0

考慮這個...

這種情況是真實的,然後拼接你的數組:

if (objects[i].y > 400) 
{ 
     removeChild(objects[i]); 
     objects.splice(i,1); 
} 

現在...下一行是:

if (objects[i].hitTestObject(catcher)) 
{ 
    // do stuff 
} 

,如果你有什麼你的數組中有4個對象,並且第一個對象的測試結果爲true> y> 400?

在那種情況下,i最初等於3。

一旦你做你的剪接,i仍然等於3

但是......現在只有3離開你的數組中的元素。

所以你的下一行,

if (objects[i].hitTestObject(catcher))

可能會拋出一個空的錯誤,因爲i仍然是3,和你的數組中的最後一個元素是現在objects[2]

這是最有可能的是什麼導致你的錯誤。

+0

讓它工作:),意識到,因爲我正在使用外部文件,我正在使用的.as文件正在鏈接到應用程序的另一個保存版本。 – 2013-04-23 19:16:34

+0

無論如何,這個答案中描述的問題存在於上面的代碼中。 – prototypical 2013-04-23 19:18:29

相關問題