目标:
我目前正在对现有库(迷宫生成器)进行补充。我正在尝试做的是定义一种存储迷宫的新方法(部分在内存中,部分在硬盘上)。
- 如果您只想查看问题,请跳至问题段落。我添加了一些额外的信息,因为您可能会建议完全不同的方法。
现在的情况:
迷宫生成器存储迷宫(在内存中)的当前方式是使用地图。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# 编译器不允许这样做。有没有人有线索可以帮助我以“好”的方式解决这个问题。