如何在XNA中引用game1类的变量

时间:2012-03-28 05:07:47

标签: c# oop null xna-4.0

我尝试通过创建Game1类的对象来引用Game1类中的数组,该对象的定义为Game1 gameObject;,构造函数中的声明为gameObject = new Game1();,其用法为gameObject.tileArray[xInt, yInt].treed = true;

除了一些方法和变量之外,game1类本身在其类代码中保持不变。当我尝试在TreeRegion类中使用此代码时,它给了我“对象引用未设置为对象的实例”,这使我相信game1类以某种方式为null。

如何更改类或对象以引用game1的变量?请注意,我是自学成才,而且还是C#的新手。

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

2 个答案:

答案 0 :(得分: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]正在null代码中返回TreeRegion

编辑:看看你是如何创建阵列的,更令人担忧的是:

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

真的想要10000x10000阵列吗?您确定需要这个gridScope吗?我原以为:

tileArray = new Tile[gridWidth, gridHeight];

请注意,在createTiles中,您只填充最多 gridHeight * gridWidth元素(即10个中的10个 数组中的元素。)

答案 1 :(得分:0)

Visual Studio中内置了一个很棒的调试器。

虽然我不知道没有Game1代码,但我认为你正在访问的数组是空的。

gameObject.tileArray需要在GameObject构造函数

中实例化

所以

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

}

假设Tile是数组中的类。