Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 2d游戏寻找正确的敌人进行战斗_Java_Arraylist_Collision_2d Games - Fatal编程技术网

Java 2d游戏寻找正确的敌人进行战斗

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,

我正在用java制作一个简单的2d游戏,我正在努力让战斗发挥作用。我要做口袋妖怪式的战斗,所以我要做的是当我按下空格键时,它检查我是否与敌人相撞,在arrayList中找到那个敌人,然后使用那个敌人执行战斗方法。这在大多数情况下都有效,但有时它似乎无法在ArrayList中找到敌人。我的检查代码是:

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();