嗨,伙计们,我想知道我的代码有什么问题。它可以使用堆栈添加第一项,但仅限于使用堆栈添加第二项。请帮帮忙
void AddItems ()
{
Item itemToAdd = itemDatabase.items[0];
if (IsInInventory(itemToAdd))
{
for (int i = 0; i < inventoryItems.Count; i++)
{
if (inventoryItems[i].item == itemToAdd )
{
if (inventoryItems[i].item.isStackable)
{
if (inventoryItems[i].stackSize != inventoryItems[i].item.stackSize)
{
inventoryItems[i].stackSize++;
break;
}
}
}
else if (inventoryItems[i].item == itemToAdd && inventoryItems[i].stackSize > itemToAdd.stackSize)
{
AddItem(itemToAdd);
}
}
}
else
{
AddItem(itemToAdd);
}
}发布于 2019-09-20 18:43:58
如果我正确理解了你的问题,你不能将一个项目添加到现有的堆栈,这可能是由于这个If条件:
if (inventoryItems[i].item == itemToAdd )如果这样做有效,您需要覆盖Item类中的"Equals“和"GetHashCode”方法,因为默认的"==“运算符只检查引用是否相等
发布于 2019-09-21 06:02:50
有很多错误。isStackable检查得太晚了。添加到堆栈中的项目只有一个。
if (inventoryItems[i].item == itemToAdd ) {}
else if (inventoryItems[i].item == itemToAdd && inventoryItems[i].stackSize > itemToAdd.stackSize) {}否则永远不会发生
void AddItems () {
Item itemToAdd = itemDatabase.items[0];
if (inventoryItems[i].item.isStackable && IsInInventory(itemToAdd)) {
for (int i = 0; i < inventoryItems.Count; i++) {
if (inventoryItems[i].item == itemToAdd ) {
if (inventoryItems[i].stackSize+itemToAdd.stackSize <= inventoryItems[i].item.stackSize) {
inventoryItems[i].stackSize += itemToAdd.stackSize;
} else {
itemToAdd.stackSize -= inventoryItems[i].item.stackSize-inventoryItems[i].stackSize;
inventoryItems[i].stackSize = inventoryItems[i].item.stackSize;
AddItem(itemToAdd);
}
break;
}
}
} else {
AddItem(itemToAdd);
}
}https://stackoverflow.com/questions/58026400
复制相似问题