SpriteBatch.Draw为矩形

时间:2013-08-04 23:04:26

标签: c#-4.0 xna-4.0 rectangles spritebatch

我想制作类似Terraria项边栏的东西。 (左上方的矩形之一)。这是我的代码。

变量

    public Rectangle InventorySlots;
    public Item[] Quickbar = new Item[9];
    public Item mouseItem = null;
    public Item[] Backpack = new Item[49];
    public int selectedBar = 0;

这是初始化

        inventory[0] = Content.Load<Texture2D>("Contents/Overlays/InventoryBG");
        inventory[1] = Content.Load<Texture2D>("Contents/Overlays/InventoryBG2");

更新方法

        int a = viewport.Width / 22;
        for (int b = 0; b <= Quickbar.Length; ++b)
        {
            InventorySlots = new Rectangle(((a/10)*b)+(b),0,a,a);
        }

绘制方法

            spriteBatch.Begin();
        for (int num = 0; num <= Quickbar.Length; ++num )
            spriteBatch.Draw(inventory[0], InventorySlots, Color.White);
        spriteBatch.Draw(inventory[1], InventorySlots, Color.White);
        spriteBatch.End();

是的,它没有完成,但是当我尝试运行它时,纹理没有显示出来。 我无法找出代码中的错误。

与SpriteBatch一起使用?在绘制方法?还是在更新?


解决

问题不在代码本身。问题在于:

        int a = viewport.Width / 22;

问题是,我在这里的视口(我使用了入门套件)是游戏窗口!

1 个答案:

答案 0 :(得分:0)

您正在指定InventorySlots覆盖其内容... 你似乎想要绘制两个精灵......但是你只在循环中绘制一个......并且你在Quickbar上的循环似乎与你的绘图调用无关。

看起来您的插槽布局计算几乎没有意义......

您应该使用数组或列表:

  public List<Rectangle> InventorySlots = new List<Rectangle>();


  // You put this code in update... but it's not going to change.. 
  // maybe initialize is best suited
  // Initialize
    int a = viewport.Width / 22; 
    InventorySlots.Clear();
    for (int b = 0; b < Quickbar.Length; ++b)
    {   // Generate slots in a line, with a pixel gap among them
        InventorySlots.Add( new Rectangle( 1 + (a+2) * b ,0,a,a) );
    }

    //Draw
    spriteBatch.Begin();
    for (int num = 0; num < InventorySlots.Count; ++num )
    {
        spriteBatch.Draw(inventory[0], InventorySlots[num], Color.White);
        spriteBatch.Draw(inventory[1], InventorySlots[num], Color.White);
    }
    spriteBatch.End();