2012-03-28 25 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

相关问题