【发布时间】:2018-05-22 15:11:45
【问题描述】:
所以我试图拥有一个二维数组的数组(所以 [,][])
尽管出于某种原因,它们最终都返回 Null(很可能是由于没有分配给数组)
Edit1:代码中的错误已修复。谢谢。 Edit2:固定标题,因为它实际上是一维数组的二维数组。
例子:
public Environment()
{
_grid2D = new Object[20, 20][];
}
我稍后也会尝试在我的代码中为它们分配对象:
public GenerateGrid()
{
Random rand = new Random();
for (int i = 0; i < 10; i++ )
{
obj = new InsertObject(rand.Next(0,19), rand.next(0,19));
_grid2D[InsertObject.XPos, InsertObject.YPos][0] = obj;
}
}
我正在尝试使用这种数组,因为我需要看似多个 2D 平面,它们相互堆叠在一起。这样,多个游戏对象在技术上可以存在于同一个空间中,因为 2D 数组是一个包含位置的数组(X 和 Y 属性已经在别处定义)
这可能有点令人费解,因为可能有更好的方法。
我需要一个 20x20 的网格,该网格有多个平面。
随机决定位置是一种设计选择,当同一位置有多个对象时,我会检查这一点并防止/重新分配位置(再次兰特)。
【问题讨论】:
-
这不是二维数组。它是一维数组的二维数组。这也是其他事情,但这是一个面向家庭的网站。
-
我觉得这是一个 XY 问题。你想用这个 2D/1D 阵列的大杂烩来完成什么?为什么不直接使用 3D 数组?
-
“很可能是因为没有分配给数组”——没错。您需要一个循环,将
new object[2]或其他内容分配给_grid2D中的每个插槽。最里面的数组需要多大?您只尝试分配给其中的第二个项目。 -
您将遇到的下一个问题是您正在创建带有超出范围索引的
InsertObjects:大小为 20 的数组具有从零 (0) 到十九 (19) 的有效索引,不是 1..20。您只在内部数组中使用[1]索引,这表明您认为这是该数组中的第一项。它不是。[0]是该数组中的第一项。 -
之后的下一个问题是您似乎在随机位置创建
InsertObjects,因此根据球的反弹方式,您有时最终会在给定位置放置一个,然后随机稍后在循环中用另一个替换它。