C#XNA-我想访问这个特定块(类实例)所在的板(类实例)

C#XNA-我想访问这个特定块(类实例)所在的板(类实例),c#,xna,C#,Xna,我想了很长时间,我想不出一个更好的标题。我不确定要解决这个问题我需要弄清楚什么具体的事情。这是我的代码减去任何我认为对这个问题不必要的东西 static class GameManager { public static List<Board> Boards = new List<Board>(); // let's say there are 2 boards } class Board { public Dictionary<Vecto

我想了很长时间,我想不出一个更好的标题。我不确定要解决这个问题我需要弄清楚什么具体的事情。这是我的代码减去任何我认为对这个问题不必要的东西

static class GameManager
{
    public static List<Board> Boards = new List<Board>();
    // let's say there are 2 boards
}

class Board
{
    public Dictionary<Vector2, Block> Blocks = new Dictionary<Vector2, Block>();
    //each board has a bunch of blocks in it.
{

class Block
{
    //I want to access the Board that this particular Block exists in.
}
静态类游戏管理器
{
公共静态列表板=新列表();
//假设有两块板
}
班级委员会
{
公共字典块=新字典();
//每个板上都有一堆块。
{
类块
{
//我想访问存在此特定块的板。
}
你看,我以前只有一个棋盘,所以如果我是block类中的一个棋盘,我想访问,比如说,一个棋盘中的棋盘数量,我可以使用
GameManager.board.blocks.Count
。我想添加多人游戏,所以我列出了一个棋盘列表,每个棋盘都有自己的一组棋盘。现在我需要让一个棋盘知道它是哪个棋盘她进来了


在访问不同级别的代码方面,是否有一种方法可以倒退?例如,如果我从
GameManager
开始,我可以通过说
GameManager.Boards[0].Blocks[new Vector2(0,0)]来前进到各个级别
对于每一个级别,我都会使用
。如果我从
Block
类开始,我是否能够访问
Board
的特定实例,而
Block
的当前实例就存在于该实例中?我不想将其转化为XY问题,那么你认为我应该怎么做?它看起来像是存储和传递一个跟踪正在更新的当前板的变量是草率的代码,因为每个块应该已经知道它存在于哪个板中,因为我实际上启动了多个板,每个板都包含各自独立的块集。您认为我是否需要将
类嵌套在
cl中ass?

考虑到您的设计,一个块没有直接的方法来知道它在哪个板上。一般来说,这是一件好事。为什么一个块需要了解它的板

但是,您可以这样写(按原样):

现在这是非常低效的,也不是很漂亮。您也可以在创建时将电路板传递给块,并将其保存在
block
类的
parent
字段中。这是更高效的速度,但每个块需要额外的变量


然而在现实中,班级几乎不需要知道是什么在支撑着他们。仔细想想,这是否真的是你游戏的一项要求。

虽然你的代码和解释都很到位,但我想指出一件事。你似乎给班级施加了很大的压力,让他们对“家长”一无所知。我想说的是,这在很大程度上取决于您正在制作的游戏的类型。例如,如果您在某种层次结构上构建了游戏结构,则可能会在所有对象上都有一个父属性,这是必需的,因为(例如)绘制子对象时,它需要知道其父对象的位置,以便知道其“根”点的位置。举个例子。@BjarkeSøgaard毫无疑问,对于了解其父对象的子对象来说,有一些有效的用例。也就是说,通常(无论是否是游戏),您可以/应该避免需要这些知识来减少耦合。感谢您的反馈!
var parent = GameManager.Boards.FirstOrDefault(b => b.Blocks.Values.Contains(this));