我应该使用存取器吗?如果没有,我该怎么做?
我正在尝试在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。如果我没弄错的话应该是“污垢”。
我觉得我这一切都错了,但我想不出有任何其他方法可以做到这一点。我尝试过的其他一切都变成了一个死胡同。
当我开始游戏时,它会加载,然后挂起。我必须从任务管理器那里停止它。
谁能告诉我我做错了什么?非常感谢你。
答案 0 :(得分:0)
您的代码中的问题是您始终在创建GetTileType
的新实例。
在LoadContent
中创建一个实例 - 让我们称之为A - 并在该实例上设置Dirt
属性。
但是你没有将该实例保存在任何地方,在方法完成后,A超出范围并最终被垃圾收集。
在Update
中,您创建一个新实例 - B - 并从中检索Dirt
属性的值。
因为这是一个新创建的实例,所以这是null
。