C#XNA创建对象单击

时间:2014-04-04 17:56:00

标签: c# xna

我正在创建一个模拟蚂蚁跑来跑去的程序,收集食物并将它放在巢中。我希望用户能够在光标点处单击并添加嵌套对象。我还希望将创建的对象添加到嵌套列表中。

到目前为止,我已经在我的主游戏类中使用了更新方法。

        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()加载图像时,列表中没有任何内容!但我不知道如何解决这个问题!它可能非常简单我只是在编程时相当新!任何帮助将不胜感激,我希望我无法解释它太难以理解。

1 个答案:

答案 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。如果情况并非如此,那么就过世了。