【问题标题】:Get objects at index out of List<Object>从 List<Object> 中获取索引处的对象
【发布时间】:2014-05-15 02:17:00
【问题描述】:

我正在尝试制作 2D RPG 游戏,并想使用 List> 来制作一个网格,用于存储不同类型的世界对象。唯一的问题是,我不知道如何从这个多维列表中取出东西。

下面的代码创建了一个多维列表并用“污垢”对象填充它(尽管 objects[i] 不起作用,这是我的问题)。

    public List<List<Object>> objects;

        this.mapWidth = 36;
        this.mapHeight = 21;
        this.objects = new List<List<Object>>();

        for (int y = 0; y < mapHeight; y++)
        {
            objects.Add(new List<Object>());
        }

        for (var i = 0; i < mapWidth; i++)
        {
            for (var j = 0; j < mapHeight; j++)
            {
                objects[i].Add(new Dirt());
            }
        }

玩家有一个位置,例如18,11,位于此地图/多维列表的中间。我想检查他周围有哪些“瓷砖”,所以我只需要更新地图上的那些东西。列表[y][x] 不起作用。

【问题讨论】:

  • 不知道如何从集合中获取项?你的意思是Dirt gridSpace = objects[18][11]
  • 你想用它做什么? ObjectSystem.Object 一样吗?
  • 它应该像@ChrisSinclair 所说的那样工作。确保首先验证第一个索引是否为空。 If(objects[i] != null && objects[i][j] != null){ Foo myFoo = objects[i][j]; }

标签: c# list object multidimensional-array


【解决方案1】:

我认为您的初始构造代码不正确。看起来您正在构建您的网格以拥有mapHeight mapheight 列。将构造代码改写成这样:

for (var y = 0; y < mapHeight; y++)
{
    objects.Add(new List<Object>());
    for (var x = 0; x < mapWidth; x++)
    {
        objects[y].Add(new Dirt());
    }
}

编辑:我认为这将生成一个表格,您可以通过以下方式进行查找:Object gridEntry = objects[y][x];

EDITx2:如果你喜欢,你可以将创建代码改写成这样:

for (var y = 0; y < mapHeight; y++)
{
    List<Object> currentRow = new List<Object>();
    objects.Add(currentRow);
    for (var x = 0; x < mapWidth; x++)
    {
        currentRow.Add(new Dirt());
    }
}

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    相关资源
    最近更新 更多