首页 > 解决方案 > 将重复的演员添加到舞台不会购物

问题描述

所以我写了一个基本的库存系统,当我添加一个项目时,它会被正确添加,这很好,但是当我从库存中删除项目时,它会检查它是否可堆叠,如果它的数量大于 1,所以当我放下物品时,我看到数量减少了 1,但物品并没有放在玩家身上,它只有在数量为 1 并且我再次放下时才会放置,它会从库存中移除并掉落在玩家身上地点。

public void removeItem(int index) {
        if (Objects.nonNull(slots[index])) {
            slots[index].setX(player.getX());
            slots[index].setY(player.getY());

            if (slots[index].isStackable() && slots[index].getAmount() > 1) {
                slots[index].setAmount(slots[index].getAmount() - 1);
                Item dropItem = slots[index];

                dropItem.setAmount(1);
                StageManager.addActor(dropItem);
            } else {
                StageManager.addActor(slots[index]);
                slots[index] = null;
            }
        }
    }

似乎只有 else 语句会将项目放在播放器上

} else {
    StageManager.addActor(slots[index]);
    slots[index] = null;
}

我不确定为什么它不像它那样 -1 数量,但为什么它不将 dropItem 在播放器不为空时丢弃。

标签: javalibgdx

解决方案


所以我只需要创建一个新项目。

public void removeItem(int index) {
        if (Objects.nonNull(slots[index])) {
            slots[index].setX(player.getX());
            slots[index].setY(player.getY());

            if (slots[index].isStackable() && slots[index].getAmount() > 1) {
                slots[index].setAmount(slots[index].getAmount() - 1);

                Item dropItem = new Item(slots[index].getId(), slots[index].getEntityType(), slots[index].getName(), (int)player.getX(), (int)player.getY(),
                        slots[index].getImage(), slots[index].getItemType(), slots[index].getSlotType(), slots[index].getLevel(), slots[index].getRarity(),
                        slots[index].getWeight(), 1, slots[index].getDescription(), slots[index].getAttributes(), slots[index].getShapeRenderer(), slots[index].isStackable());

                StageManager.addActor(dropItem);
            } else {
                StageManager.addActor(slots[index]);
                slots[index] = null;
            }
        }
    }

推荐阅读