繁体   English   中英

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

[英]How does one refer to the game1 class's variables in XNA

我尝试通过创建具有其定义Game1 gameObject;的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

当我尝试在TreeRegion类中使用此代码时,它给我“对象引用未设置为对象的实例”,使我相信game1类某种程度上为null。

不必要。 看你的表情:

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

如果以下任何一个为真,则将抛出NullReferenceException

  • gameObject为null(不太可能,鉴于您显示的代码)
  • gameObject.tileArray为null
  • gameObject.tileArray[xInt, yInt]为空

您尚未向我们展示Game1类-这里的问题很可能是第二个或第三个项目符号。

您可能应该考虑这是否实际上应该是Game1 API的一部分,而不是像下面这样挖掘级别:

game1.MakeTree(xInt, yInt);

...或其他更好的名字。 当然,您似乎在这里缺少一些封装。

(就我个人而言,我不建议通过XNA之类的东西来学习C#。我认为,尽管您仍处于学习语言和核心库的阶段,但在控制台应用程序之类的简单环境中工作是一个更好的主意。我意识到他们可能看起来很无聊,但从长远来看,前期的一些基础工作可能会带来很大的不同。)

编辑:现在我们可以看到Game1 (可以使用新名称-您应该尝试遵循.NET命名约定 )我强烈怀疑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元件(即10000出数组中一种千万元素)。

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

尽管我无法说出Game1代码,但我会假设您正在访问的数组为null。

需要在GameObject构造函数中实例化gameObject.tileArray

所以

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

}

假设Tile是数组中的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM