陷入困境?

时间:2015-06-11 03:04:08

标签: java loops for-loop infinite 2d-games

好吧,我在游戏中添加了保存(通过序列化),这完全没问题,但是这些项目有精灵和东西,我逻辑上不会保存,我是如何解决这个问题非常简单。

我在我的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();
        }

2 个答案:

答案 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;
       }
      }
     }