比较两个字符串时出现Unity3D堆栈溢出错误

ckx4rj1h  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(78)

所以我正在做一个游戏,我目前正在处理库存系统,我创建了一个Item和一个Inventory类,我比较了Inventory类中物品的一些属性,当我试图访问Item类中的ID字符串时,我得到了一个stackoverflow错误,这里是inventory和item类:

public class item
{
    public string id { get; set; }
    public int amount;
    public int stacksize;
}

public class inventory
{
    public bool open = false;
    item[] items = new item[43];
    //first 30 inv
    //next 5 hotbar
    //next 4 armor
    //next 4 equipment
    public GameObject invScreen;

    public void printInv()
    {
        foreach (item n in items)
        {
            PlayerController.print(n.id + "   |   " + n.amount);
        }
    }

    public void addItem(item add)
    {
        int i = 0;
        foreach(item x in items)
        {
            item f = x;
            if (f.id == add.id)
            {
                if (add.amount + f.amount <= f.stacksize)
                {
                    items[i].amount += add.amount;
                    f.amount = 0;
                }
                else
                {
                    f.amount = (add.amount + f.amount) - f.stacksize;
                }
            }
            i++;
        }
        i = 0;
        foreach(item x in items)
        {
            item f = x;
            if (f.id == "filler")
            {   
                if (add.amount + f.amount <= f.stacksize)
                {
                    items[i].amount += add.amount;
                    f.amount = 0;
                }
                else
                { 
                    f.amount = (add.amount + f.amount) - f.stacksize;
                    addItem(f);
                }
            }
            i++;
        }
    }

    public void swap(int item1, int item2)
    {
        item x = items[item1];
        item y = items[item2];
        items[item1] = y;
        items[item2] = x;
    }

    public void init()
    {
        int i = 0;
        foreach(item v in items)
        {
            item e = new item();
            e.stacksize = 1;
            e.amount = 1;
            e.id = "filler";
            items[i] = e;
            i++;
        }
    }
}

我知道我的代码可能没有优化,也没有组织,所以很抱歉。
我试着搜索可能导致无限循环的代码,但我没有找到任何东西,所以这就是为什么我在这里。

w46czmvw

w46czmvw1#

好的,我已经解决了,谢谢你,不需要更多的答案:D

相关问题