C#XNA - 我想访问该特定Block(类的实例)所在的Board(类的实例)

时间:2015-02-14 04:14:24

标签: c# xna

我想了很久,我无法想出更好的头衔。我不确定为解决这个问题我需要弄清楚具体的事情。这是我的代码减去我认为对于这个问题不必要的任何东西。

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.
}

看,我以前只有一块电路板,所以如果我是块类中的块,并且我想访问一块电路板中的块数,我可以使用GameManager.Board.Blocks.Count。我想添加多人游戏,所以我制作了一个板块列表,每个板块都有自己的一组块。现在我需要以某种方式让一个块知道它在哪个板上。

在访问不同级别的代码方面,我是否可以倒退?例如,如果我从GameManager开始,我可以通过GameManager.Boards[0].Blocks[new Vector2(0, 0)]以及.为每个级别下降来向前推进。如果我从Block课开始,我是否能够访问Board的特定实例,其中Block的当前实例存在于其中?我不想把它变成XY问题所以你认为我该怎么办?看起来存储和传递一个跟踪当前正在更新的电路板的变量是邋code的代码,因为每个块应该已经知道它存在哪个电路板,因为我实际上启动了多个电路板,每个电路板都包含它们自己的独立电路板块。您是否认为我需要将Block类嵌套在Board类中?

1 个答案:

答案 0 :(得分:0)

鉴于您的设计,块没有直接方式来了解它所在的板。通常,这是一件好事。为什么一个块需要知道它的电路板?

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

var parent = GameManager.Boards.FirstOrDefault(b => b.Blocks.Values.Contains(this));

现在效率很低,而且不是很漂亮。您也可以在创建块时将块传递给块,并将其保存在parent类的Block字段中。这是更快速的效率,每块的额外变量为代价。

实际上,课程很少需要知道持有它们的内容。仔细考虑以确定这实际是否是您游戏的要求。