我正在创建一个模拟蚂蚁跑来跑去的程序,收集食物并将它放在巢中。我希望用户能够在光标点处单击并添加嵌套对象。我还希望将创建的对象添加到嵌套列表中。
到目前为止,我已经在我的主游戏类中使用了更新方法。
mouseStateCurrent = Mouse.GetState();
if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
{
int foodWidth = 50;
int foodHeight = 50;
int X = mouseStateCurrent.X;
int Y = mouseStateCurrent.Y;
foodPosition = new Rectangle(X, Y, foodWidth, foodHeight);
food = new stationaryFood(foodPosition);
foodList.Add(food);
}
这会编译,但是当我点击游戏崩溃时,我得到一个错误,说当食物对象被绘制在' draw'方法,食物的质地为空。我理解为什么会发生这种情况,因为我试图在主游戏类的LoadContent()方法中加载纹理,如下所示
foreach (stationaryFood f in foodList)
{
f.CharacterImage = foodImage;
}
这里是食物对象的单独类中的set / get
public Texture2D CharacterImage
{
set
{
foodImage = value;
}
get
{
return foodImage;
}
}
这是食物对象类中的方法,我得到了错误
public void Draw(SpriteBatch spriteBatch, List<stationaryFood> foodlist)
{
foreach (stationaryFood food in foodlist)
{
spriteBatch.Draw(foodImage, foodBoundingRectangle, foodColor);
}
}
foodimage变量为null。我知道这是因为当LoadContent()加载图像时,列表中没有任何内容!但我不知道如何解决这个问题!它可能非常简单我只是在编程时相当新!任何帮助将不胜感激,我希望我无法解释它太难以理解。
答案 0 :(得分:0)
编辑:忽略我发布和删除的内容。在第二次看到这个问题之后,我意识到我的答案存在一些问题。
在Update方法中创建新的固定食物时,您永远不会分配新的固定食物的角色图像。你应该在你的Game1中有一个名为foodImage的Texture成员。您将在LoadContent方法中加载foodImage的纹理。现在,只要您在Update中创建新的固定食物,就需要使用foodImage指定新食物的CharacterImage以及通过鼠标位置创建的位置。
让我们说你的fixedFood类看起来像:
class stationaryFood
{
public Texture2D CharacterImage { get; set; }
public Rectangle Position { get; set; }
public stationaryFood(Texture2D image, Rectangle position) {
CharacterImage = image;
Position = position;
}
}
所以纹理成员作用于Game1:
Texture2D foodImage;
在LoadContent方法中:
foodImage = Content.Load<Texture2D>("path to texture");
更新:
if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
{
int foodWidth = 50;
int foodHeight = 50;
int X = mouseStateCurrent.X;
int Y = mouseStateCurrent.Y;
var foodPosition = new Rectangle(X, Y, foodWidth, foodHeight);
var food = new stationaryFood(foodImage, foodPosition);
// no need to scope foodPosition or food to Game1 since were creating and adding to list here
foodList.Add(food);
}
在平局中:
foreach (stationaryFood food in foodlist)
{
spriteBatch.Draw(food.CharacterImage, food.Position, food.Color);
}
现在我猜测foodList是Game1的成员,所以不需要将列表传递给Draw。如果情况并非如此,那么就过世了。