好吧,我在游戏中添加了保存(通过序列化),这完全没问题,但是这些项目有精灵和东西,我逻辑上不会保存,我是如何解决这个问题非常简单。
我在我的Item类中创建了一个方法(每个项都扩展了它),它分配了它需要的所有东西(称为basicInitialization())。这很棒!
但是,我注意到在加载项目后放置的任何代码都不会运行。我调查并意识到我陷入了无限的for循环:
public void loadItems(Player p) {
Item[] temp = SaveGame.loadItems();
for (int i = 0; i < items.length; i++) {
this.removeByIndex(i);
}
for (int j = 0; j < temp.length; j++) {
items[j] = temp[j];
}
for (int t = 0; t < items.length; t++) {
if (items[t] == null) {
t += 1;
}
items[t].basicInitialization();
if (items[t] instanceof EquipableItem) {
items[t].basicInitialization(((EquipableItem)items[t]).slot);
}
}
}
当我删除了:
items[t].basicInitialization();
if (items[t] instanceof EquipableItem) {
items[t].basicInitialization(((EquipableItem)temp[t]).slot);
}
部分问题消失了。
我错过了一些非常明显的东西吗? 感谢您提供的任何帮助,如果需要更多代码,我将很乐意给予它!
编辑: - 重新构建一些代码 以下是basicInitialization的示例:
public void basicInitialization() {
this.sprite = Sprite.HealthPotion;
this.name = "Health Potion";
this.value = "25";
this.desc = "Heals Up to 5 HP";
level = Game.getGame().getLevel();
}
答案 0 :(得分:0)
您应该将代码放在第一个for
循环中:
int j = 0;
if (temp[i] == null) { //If there is no item then continue to the next one
i+= 1
}
else{
items[j] = temp[i];
j++;
}
如果下一个项目为空,那么它将在没有else
块的情况下被分配。
答案 1 :(得分:0)
我想我终于修好了,谢谢你的帮助!这绝对是一个难以破解的坚果!
public void loadItems(Player p) {
Item[] temp = SaveGame.loadItems();
for (int i = 0; i < items.length; i++) {
this.removeByIndex(i); // Remove all current items
}
if (this.lastItemInList(temp) == -1) { // If the loaded item list has no items
return;
}
for (int j = 0; j < temp.length; j++) {
items[j] = temp[j];items
}
for (int t = 0; t < items.length; t++) {
if (items[t] == null) {
if (t != items.length) {
for (int i = t; i < items.length; i++) {
if (items[i] != null) {
t = i; //Gets the next time there is an item that isn't null
break;
}
}
}
}
items[t].basicInitialization();
if (items[t] instanceof EquipableItem) {
items[t].basicInitialization(((EquipableItem)items[t]).slot);
}
if (t == this.lastItemInList(items)) { //Once it hits the last item, then return
System.out.println(":::FULLY LOADED ITEMS >> RETURNING:::");
return;
}
}
}