0

我想做类似泰拉瑞亚物品侧边栏的东西。(左上角矩形之一)。这是我的代码。

变量是

    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 一起使用?在draw方法中?或在更新中?


解决

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

        int a = viewport.Width / 22;

问题是,我认为这里的视口(我使用了初学者工具包)是游戏窗口!

4

1 回答 1

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();
于 2013-08-05T00:56:25.993 回答