2013-09-24 78 views
-1

我試圖創建一個使每個塊中,我可以用它來輕鬆塊添加到通過XML舞臺塊陣列的系統,但是我得到AS3 - 類型錯誤:錯誤#1009

[Fault] exception, information=TypeError: Error #1009: Cannot access a property or method of a null object reference. 

初始化'blockStone'時。

這裏是我的主要Block類,每個塊在這裏初始化。

package com.snakybo.platformengine.block { 
    import flash.display.MovieClip; 

    public class Block extends MovieClip { 
     public static var blockList:Array = []; 

     public static const blockStone:Block = (new BlockStone(0)); 

     public var blockID:int; 

     private var mc:MovieClip; 

     public function Block(blockID:int, mc:MovieClip) { 
      if (blockList[blockID] != null) { 
       throw new Error("Slot " + blockID + " is already occupied by " + blockList[blockID] + " when adding " + this); 
      } else { 
       blockList[blockID] = this; 

       this.blockID = blockID; 
       this.mc = mc; 

       mc.x = 100; 
       mc.y = 100; 

       addChild(mc); 
      } 
     } 
    } 
} 

這裏的BlockStone類:

package com.snakybo.platformengine.block { 

    public class BlockStone extends Block { 
     public function BlockStone(blockID:int) { 
      super(blockID, new stone()); 
     } 
    } 
} 

的FlashDevelop是指這條線時,它的錯誤:

public class BlockStone extends Block { 

這裏的堆棧跟蹤:

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at global$init()[C:\Users\Kevin\Desktop\Extra\Code\Actionscript\PlatformEngine\src\com\snakybo\platformengine\block\BlockStone.as:3] 
    at com.snakybo.platformengine.block::Block$cinit() 
    at global$init()[C:\Users\Kevin\Desktop\Extra\Code\Actionscript\PlatformEngine\src\com\snakybo\platformengine\block\Block.as:5] 
    at com.snakybo.platformengine::Game()[C:\Users\Kevin\Desktop\Extra\Code\Actionscript\PlatformEngine\src\com\snakybo\platformengine\Game.as:13] 
    at com.snakybo.platformengine::Main/init()[C:\Users\Kevin\Desktop\Extra\Code\Actionscript\PlatformEngine\src\com\snakybo\platformengine\Main.as:20] 
    at com.snakybo.platformengine::Main()[C:\Users\Kevin\Desktop\Extra\Code\Actionscript\PlatformEngine\src\com\snakybo\platformengine\Main.as:11] 

我很確定這是一個問題AS3,因爲此方法適用於Java。對於在AS3中使用在XML文件中定義的塊ID的更好方法,我願意提供建議。

任何人都可以解釋爲什麼發生這種情況?

+0

什麼是BlockStone.as:4 –

+0

這就是'公共類BlockStone擴展Block {',我刪除了'/ ** @author * /'。我會編輯它 – Snakybo

+0

讓我們驗證一下。超級評論(blockID,new stone());並且追蹤(新石頭()) –

回答

0

看起來你在通過Block構造函數之前正在實例化一個新的Blockstone。嘗試簡單地聲明公共靜態塊blockStone:Block;而不是先設置一個值,然後將其設置在Block的構造函數中。

+0

我無法在構造函數中定義常量,如果我刪除了const並在構造函數中定義它,那麼當我使用'Block.blockList [0]'將其調整爲未定義時,它不會創建/初始化blockStone。 – Snakybo

+0

沒錯。自從我完成AS3以來已經有一段時間了。我想我看到了這個問題。你已經將Block.blockstone設置爲一個const。如果刪除const屬性,應該很容易設置它。我希望有所幫助。我沒有在我面前打開Flash。 – itsmikem

+0

......哦,如果我更仔細地閱讀你的評論,這會有所幫助。嘗試拋開const,並實例化Block,然後設置Blockstone。您必須先通過構造函數,因爲Blockstone是Block的一個實例。這有點奇怪。舞臺上有很多Block嗎? – itsmikem