我想制作类似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;
问题是,我在这里的视口(我使用了入门套件)是游戏窗口!
答案 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();