列表填充问题
本文关键字:问题 填充 列表 | 更新日期: 2023-09-27 18:26:25
这种情况发生在我身上不止一次,我不知道它可能是什么。我有一个手工制作食谱的列表,我这样添加:
ItemRecipe firePitRecipe = new ItemRecipe();
firePitRecipe.Items.Add(new Rock());
foreach (Item item in firePitRecipe.Items)
{
item.ItemCount = 5;
}
firePitRecipe.Output = new FirePit();
firePitRecipe.Name = "firepit";
CraftingList.Add(firePitRecipe);
我目前有6个食谱在清单上。当我尝试制作一件物品时,盒子里没有显示我可用的工艺品。当我评论出这行和最后两个食谱时:
//firePitRecipe.Items.Add(new Rock());
一切正常。我不知道这个错误可能是什么。是因为我每次添加到配方中都会创建一个新的项目实例吗。项目?
public class Rock : Item
{
Texture2D texture;
public Rock()
{
this.Texture = texture;
ItemName = "rock";
ItemType itemType = ItemType.craft;
}
public Rock(Vector2 position)
{
texture = Content.Load<Texture2D>("rock");
this.Position = position;
this.Texture = texture;
ItemName = "rock";
ItemType itemType = ItemType.craft;
ItemPickedUp = false;
}
}
这是我的摇滚课,我所有的其他项目都很相似。这没什么奇怪的,所以我看不出有什么不对。设置断点会显示我的制作列表中没有一个项目为空。
另一件事可能是,当我循环浏览列表,并将其与我库存中的物品进行核对时,但我对此表示怀疑。
我把它缩小到几个方法。它们只是没有在表中正确绘制或设置。
private void SetItemPositionInTable(Player player, Item output)
{
for (int i = 0; i < CraftingTableItems.Count(); i++)
{
if (CraftingTableItems[i].ItemName == "empty")
{
CraftingTableItems[i].ItemName = output.ItemName;
CraftingTableItems[i].Texture = output.Texture;
Console.WriteLine(output.ItemName);
break;
}
else if (CraftingTableItems[i].ItemName == output.ItemName)
{
break;
}
else if (CraftingTableItems[i].ItemName != "empty" && output.ItemName == "empty")
{
CraftingTableItems[i].ItemName = "empty";
}
}
}
public void DrawCraftingTable(SpriteBatch sb, Player player, SpriteFont font)
{
if (player.DrawCraftingTable == true)
{
sb.Draw(Texture, CraftingRectangle, Color.White);
foreach (Item item in CraftingTableItems)
{
if (item.ItemName != "empty")
{
sb.Draw(item.Texture, item.ItemSlotPosition, Color.White);
}
}
}
}
我很困惑,因为这适用于列表中的3项,但不适用于6项?这是手工制作表。
CraftingTableItems = new List<Item>(12);
for (int x = 0; x < 4; x++)
{
for (int y = 0; y < 3; y++)
{
CraftingTableItems.Add(new Item(new Vector2((int)(64 * x), (int)(64 * y)), "empty"));
}
}
我认为您没有给我们足够的代码来了解出了什么问题。这件事引起了我的注意:
public class Rock : Item
{
Texture2D texture; // This isn't initialized so it is null?
public Rock()
{
this.Texture = texture; // Here the assumed null is assigned to base class Texture
ItemName = "rock";
ItemType itemType = ItemType.craft;
}
...
因为您使用new Rock()
创建岩石,所以根据您向我们展示的内容,this.Texture
将保持为空。稍后绘制该岩石时,可能会因为缺少纹理而失败。