1

目标:

我目前正在对现有库(迷宫生成器)进行补充。我正在尝试做的是定义一种存储迷宫的新方法(部分在内存中,部分在硬盘上)。

- 如果您只想查看问题,请跳至问题段落。我添加了一些额外的信息,因为您可能会建议完全不同的方法。

现在的情况:

迷宫生成器存储迷宫(在内存中)的当前方式是使用地图。Map 包含一堆 InnerMapArrays,每个 InnerMapArrays 包含迷宫中的一行像素。点可以像这样在迷宫中读/写:

… //Code that creates maze map
map[x][y] = true;

在 Map 类中有一个方法可以返回正确的数组 (x)

public override InnerMapArray this[int x]
{
    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    get
    {
        return innerData[x];
    }
}

然后它会在 innerData 上调用 [y],它也包含一个类似的方法来最终返回正确的像素。

问题:

回到我想要做的是创建一个新的 Map 类型,它将迷宫的一部分保存在内存中,并将迷宫的一部分保存在磁盘上。例如,我想以 100x100 像素为一组加载迷宫区域,而不是按行加载。(下图中红色部分应在像素 x=50,y=50 更改时加载,例如)

红色方块是当前应该加载到内存中的部分

Map/InnerMapArray 结构的当前实现不允许这样做。我想要的是一种实际获取在一个方法中传递的 X 和 Y 的方法。我认为可能可行的是以下(不工作的代码)

public override InnerMapArray this[int x][int y]
{
    get
    {
        //load a certain 100x100 part of the maze in memory and set it as current
        //so while generating the maze pixels near the currently generated/read pixel
        //can be read really fast while others far away won't use any memory
    }
}

遗憾的是,C# 编译器不允许这样做。有没有人有线索可以帮助我以“好”的方式解决这个问题。

4

1 回答 1

2

实现你想要的方法是:

public overrride InnerMapArray this[int x, int y] { ... }

这段代码只有在你有一个像这样的“双”索引器时才有效,当然要在 de 基类中被覆盖。希望这可以帮助 :)

于 2013-03-09T02:35:29.377 回答