2012-03-28 48 views
0

我嘗試通過創建Game1類的對象來定義Game1類中的一個對象,其定義爲Game1 gameObject;,其構造函數中的聲明爲gameObject = new Game1();,其用法爲gameObject.tileArray[xInt, yInt].treed = true;如何引用XNA中的game1類的變量

除了一些方法和變量,game1類本身在類代碼中保持不變。當我嘗試在TreeRegion類中使用此代碼時,它給了我「對象引用未設置爲對象的實例」,導致我相信game1類以某種方式爲空。

如何改變類或對象來引用game1的變量?請注意,我是自學成才的,而且對C#來說還是比較新的。

引用的Game1類: http://pastebin.com/0chEcKfq 的Game1本身 http://pastebin.com/zLDVzCca

回答

1

當我嘗試在TreeRegion類它給了我使用此代碼「對象引用不設置到對象的實例, 「讓我相信game1類在某種程度上是空的。

沒必要。看看你的表情:

gameObject.tileArray[xInt, yInt].treed = true; 

這將引發NullReferenceException如果其中任何爲真:

  • gameObject爲空(不可能的,因爲還有你的代碼)
  • gameObject.tileArray爲空
  • gameObject.tileArray[xInt, yInt]爲空

您還沒有向我們展示Game1類 - 看起來第二個或第三個子彈很可能是這裏的問題。

你或許應該考慮是否這實際上應該是Game1 API的一部分,而不是向下挖這樣的水平:

game1.MakeTree(xInt, yInt); 

...或任何更好的名字可能。它看起來像你在這裏錯過了一些封裝。我個人並不推薦通過類似XNA的方式學習C#,我認爲當你還處於學習語言和核心庫的階段時,最好在一個簡單的環境中工作,比如控制檯。應用我意識到,他們可能看起來枯燥,但有點基礎的的前期可能使從長遠來看,一個巨大的不同)

編輯:現在我們可以看到Game1(可以用新的名稱做 - 你。應該嘗試遵循.NET naming conventions)我強烈懷疑createTiles正在導致此問題。 實際上是填充tileArray的每個元素 - 特別是因爲您甚至從未使用過ab。我的猜測是gameObject.tileArray[xInt, yInt]在您的TreeRegion代碼中返回null

編輯:看你如何創建陣列,它更涉及:

gridWidth = 100; gridHeight = 100; 
gridScope = gridWidth * gridHeight; 
tileArray = new Tile[gridScope, gridScope]; 

真的想10000x10000陣列?你確定你需要這個gridScope?我本來期望:

tileArray = new Tile[gridWidth, gridHeight]; 

注意,在createTiles你只填充最多gridHeight * gridWidth元(即10 出數組中的十個元素)。

+0

香港專業教育學院去,並添加它 – 2012-03-28 05:19:43

+0

這的確是空數組,因爲我仍然可以ascess在 – 2012-03-28 05:21:50

+0

陣列聲明和定義,它是在createTiles使用方法 – 2012-03-28 05:24:41

0

在Visual Studio中內置了一個很棒的調試器。

雖然我不能出的Game1代碼告訴,我會假設你正在訪問的數組爲null。

gameObject.tileArray需要在遊戲對象構造

所以

Game1() 
{ 
    tileArray = new Tile[](); 

} 

假設瓷磚被實例化的是,是在陣列中的類。

+0

現在我們已經有了'Game1' - 瓦片數組看起來像非空,但我相信其中一個*元素*仍然爲空。 – 2012-03-28 05:24:36

相關問題