如何在java中测试多个交叉点?

如何在java中测试多个交叉点?,java,jpanel,draw,game-physics,rectangles,Java,Jpanel,Draw,Game Physics,Rectangles,我现在正在做一个塔防游戏 简单地说,它是这样工作的:绿色圆圈(敌人)在屏幕上移动。通过单击,可以放置塔。敌人的下方隐藏着一个长方形,塔的周围有一个巨大的不透明长方形,表示其命中范围。如果他们相撞,敌人开始失去生命,直到死亡 之前,我用这个测试来看看敌人是否在塔的射程之内: for(int i=0;i<enemy.length; i++) //Runs for the total amount of enemies { for(int j=0; j<boxes.length;j++

我现在正在做一个塔防游戏

简单地说,它是这样工作的:绿色圆圈(敌人)在屏幕上移动。通过单击,可以放置塔。敌人的下方隐藏着一个长方形,塔的周围有一个巨大的不透明长方形,表示其命中范围。如果他们相撞,敌人开始失去生命,直到死亡

之前,我用这个测试来看看敌人是否在塔的射程之内:

for(int i=0;i<enemy.length; i++) //Runs for the total amount of enemies
{
  for(int j=0; j<boxes.length;j++) //Runs for the total amount of towers placed
  {
    if(enemy[i].getEBox().intersects(boxes[j]))  //boxes[j] is the towers' range box
    {
      enemy.setHealth(enemy.getHealth()-1);
    }
  }
}

for(inti=0;i要使一座塔只向一个敌人射击,在射击开始时翻转环并打断内环

for(int j=0; j<boxes.length;j++) //Runs for the total amount of towers placed
{
  for(int i=0;i<enemy.length; i++) //Runs for the total amount of enemies
  {
    if(enemy[i].getEBox().intersects(boxes[j]))  //boxes[j] is the towers' range box
    {
      enemy[i].setHealth(enemy[i].getHealth()-1);
      break; // skip remaining enemies, since towers has used
             // up it's shooting capability for this round
    }
  }
}

用于(int j=0;j你可以按照你检测到的敌人的顺序来存储敌人,这样你就可以知道哪一个是最近的。比如检测到的敌人的ArrayList或者每个敌人对象的ID类型的变量,它们在检测到时就初始化了。我很确定有很多类似的方法,所以以某种方式存储一个命令是可行的。一旦你有了一个命令,你就可以只攻击那一个,不需要再测试检测到的对象,同时仍在寻找未来的敌人,并继续存储它们等等。
就你而言

if(敌方[i].getEBox().intersects(框[j])&&(敌方[i-1].getEBox().intersects(框[j])

我真的不明白(或者可能太累了)为什么你需要这些条件来攻击。如果你的敌人已经准备好了,为什么你不攻击第一个呢?如果在范围内&如果没有,你就继续下一个。
我希望我没有误解任何事情,可能会有所帮助。:)

当两个对象同时碰撞时会发生什么情况?您会有一个条件,该条件会一直运行,直到第一个相交的对象停止…然后将其从列表中删除…然后移动到第二个添加的下一个对象…然后等待其停止…然后将其从列表中删除…依此类推。它的运行方式与第一个循环完全相同。第二个条件总是通过..@DarkV1,但是如果我有两座塔,而第一座塔没有杀死敌人呢?这将使其余的塔处于不活动状态,直到第一个敌人死亡。你将得到敌人在射程内的塔的数量。并根据测试中塔的总数量的伤害减去敌人的生命值基本上是在检查:敌人在射程内吗?&前面没有敌人也在同一个塔的射程内吗?如果是的话,造成伤害。ID想法的唯一问题是,这意味着我需要改变我的敌人对象类的布局,而我认为我应该能够用一个iif语句解决这个问题上一座有点像马车。我没有试过下一座,但有限的射击并不是我真正想要的。而且,如果塔楼重叠,或者我画了很多塔楼,有些塔楼实际上根本不会伤害敌人。。
for(int j=0; j<boxes.length;j++) //Runs for the total amount of towers placed
{
  for(int i=0;i<enemy.length; i++) //Runs for the total amount of enemies
  {
    if(enemy[i].getEBox().intersects(boxes[j]))  //boxes[j] is the towers' range box
    {
      enemy[i].setHealth(enemy[i].getHealth()-1);
      break; // skip remaining enemies, since towers has used
             // up it's shooting capability for this round
    }
  }
}
for (int j=0; j<boxes.length; j++) //Runs for the total amount of towers placed
{
   int enemyToShootIdx = -1;
   for (int i=0; i<enemy.length; i++) //Runs for the total amount of enemies
      if (enemy[i].getEBox().intersects(boxes[j]))  //boxes[j] is the towers' range box
         if (enemyToShootIdx == -1 || betterCandidate(boxes[j], enemy[i], enemy[enemyToShootIdx]))
            enemyToShootIdx = i;
   if (enemyToShootIdx != -1)
      enemy[enemyToShootIdx].setHealth(enemy[enemyToShootIdx].getHealth()-1);
}