Java 2d游戏寻找正确的敌人进行战斗
我正在用java制作一个简单的2d游戏,我正在努力让战斗发挥作用。我要做口袋妖怪式的战斗,所以我要做的是当我按下空格键时,它检查我是否与敌人相撞,在arrayList中找到那个敌人,然后使用那个敌人执行战斗方法。这在大多数情况下都有效,但有时它似乎无法在ArrayList中找到敌人。我的检查代码是:Java 2d游戏寻找正确的敌人进行战斗,java,arraylist,collision,2d-games,Java,Arraylist,Collision,2d Games,我正在用java制作一个简单的2d游戏,我正在努力让战斗发挥作用。我要做口袋妖怪式的战斗,所以我要做的是当我按下空格键时,它检查我是否与敌人相撞,在arrayList中找到那个敌人,然后使用那个敌人执行战斗方法。这在大多数情况下都有效,但有时它似乎无法在ArrayList中找到敌人。我的检查代码是: if (space) { for (Rectangle collideable : Enemy.ens) { if (intersects(playerR,
if (space) {
for (Rectangle collideable : Enemy.ens) {
if (intersects(playerR, collideable)) {
System.out.println("Colliding with Enemy!");
x = locx;
y = locy;
playerR.setLocation(x, y);
for (int i = 0; i < Game.enemies.size(); i++) {
if (Enemy.ens.get(i).equals(collideable)) {
System.out.println("Can't find enemy to fight");
System.out.println(Game.enemies.get(i).getName());
fightQuestion(Game.enemies.get(i), i);
break;
}
}
break;
}
}
}
为什么要执行该语句:
System.out.println("Can't find enemy to fight");
对于第二个循环中的每个迭代,不管先检查条件如何?为什么第二个循环会检查:
i < Game.enemies.size();
而不是:
i < Enemy.ens.size();
我能看到这种情况发生的唯一原因是没有看到更多的代码,无论出于什么原因,游戏中不存在您试图与之战斗的敌人。敌人,但在敌人中存在。我猜这是一个数组列表。敌人返回了什么。ens.geti?@Lex Webb我编辑了问题以包括游戏的时间。敌人是filled@PabloLozano将返回碰撞矩形的x和y位置。因此,敌方ems是否为单个敌方?如果是这样的话,你似乎已经提到了敌人和可碰撞的,那么为什么你需要第二个循环来重新搜索敌人呢?哦,很抱歉。我在写问题时加上了那一行。我的意思是在if语句之后。使用两个列表的整个双循环似乎是一种奇怪的方式。将每个“可碰撞”存储在与其相关的敌人内部将更有意义,从而消除双回路的需要。这更符合一般OOP,因为可碰撞区域与它所表示的对象直接相关;但是我在thread-2 java.lang.IndexOutOfBoundsException:Index:2598中得到了错误异常,大小:10在java.util.ArrayList.rangeCheckUnknown Source在java.util.ArrayList.getUnknown Source在com.hosfordryan.tileRPG.entities.Player.tickPlayer.java:121在com.hosfordryan.tileRPG.Game.runGame.java:144在java.lang.Thread.runUnknown Source,那么你有一个索引要通过2不同大小的数组,不是吗?
i < Enemy.ens.size();