如何使用访问器设置此变量?

时间:2012-12-13 11:04:49

标签: c# accessor

我应该使用存取器吗?如果没有,我该怎么做?

我正在尝试在LoadContent()下的游戏中加载纹理,然后尝试将其传递到Update(),以便我可以将其用于另一个类中的碰撞检测目的。

这是我的代码:

Game1.cs

public class GetTileType
{
    public Texture2D dirt;
    public Texture2D Dirt
    {
        get
        {
            return dirt;
        }

        set
        {
            dirt = value;
        }
    }
}

public class Main : Game
{
GetTileType getTileType = new GetTileType();

protected override void LoadContent()
{

    getTileType.Dirt = Content.Load<Texture2D>("Dirt");
}

protected override void Update(GameTime gameTime)
{
    Texture2D dirt = getTileType.Dirt;

    player.GetTileType(dirt);

    base.Update(gameTime);
}

Player.cs(暂时保存碰撞信息)

public void GetTileType(Texture2D groundTexture)
{
    Tile tile = (Tile)Main.currentLevel.GetTile(0, 0);

    Texture2D texture = tile.Texture;

    if (texture == groundTexture)
    {
        // Write code to handle what to do if the player tries to enter the ground.
    }
}
}

LoadContent()还有更多内容,但与此问题无关。 Update()也是如此。在调试中,player.GetTileType(dirt);出现为null。如果我没弄错的话应该是“污垢”。

我觉得我这一切都错了,但我想不出有任何其他方法可以做到这一点。我尝试过的其他一切都变成了一个死胡同。

当我开始游戏时,它会加载,然后挂起。我必须从任务管理器那里停止它。

谁能告诉我我做错了什么?非常感谢你。

1 个答案:

答案 0 :(得分:0)

您的代码中的问题是您始终在创建GetTileType的新实例。

LoadContent中创建一个实例 - 让我们称之为A - 并在该实例上设置Dirt属性。
但是你没有将该实例保存在任何地方,在方法完成后,A超出范围并最终被垃圾收集。

Update中,您创建一个新实例 - B - 并从中检索Dirt属性的值。
因为这是一个新创建的实例,所以这是null