【发布时间】:2015-08-26 13:28:48
【问题描述】:
好吧,我在我的游戏中添加了保存(通过序列化),它工作得很好,但是这些项目有一些东西,比如精灵和我逻辑上不会保存的东西,我解决这个问题的方法很简单。
我在我的 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);
}
部分和问题消失了。
我在这里遗漏了一些非常明显的东西吗?
感谢您提供的任何帮助,如果需要更多代码,我会很乐意提供!
编辑: - 重构了一些代码 下面是一个基本初始化的例子:
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();
}
【问题讨论】:
-
告诉我们
basicInitialization()?它是否调用loadItems()? -
不,在原帖中添加了一个健康药水的例子。
-
你确定这是一个很好的循环,而不是异常或需要很长时间的调用?如果你把 println 放在循环中,它会一遍又一遍地打印出来吗?如果只执行一次 basicInitialization 调用会怎样?
-
我注意到的一件事是您的 instanceof 检查是在
items[i]上,但您随后会转换temp[i]。所以我想知道是否有一个 ClassCastException 后来被吞没和忽略。 -
它们不会一遍又一遍地打印,我没有遇到任何异常,而且我不确定通话需要很长时间。我还创建了一个空方法并调用了空方法而不是 basicInitialization,它做了同样的事情。我需要把两者都拿出来才能继续,我再次更新了原始帖子中的代码,在那里我摆脱了演员表。
标签: java loops for-loop infinite 2d-games