如何在java中高效地编写大量/多个敌人的繁殖和冲突检测代码

如何在java中高效地编写大量/多个敌人的繁殖和冲突检测代码,java,android,arrays,collision-detection,Java,Android,Arrays,Collision Detection,我遇到了一些困难,因为我不知道如何高效地编写代码。 我正在创建一个垂直滚动射击游戏&我想产生大量的敌人。 在地图的特定y坐标处&给他们一个特定的x坐标。 如果我用几个敌人进行测试,在我的敌人类中,我现在使用的代码如下所示: if (Background.bgY == -3972 && active == 0) { active = 1; type = 1; centerX = enemyXstart4; KnightmareGame.activated = 1; Knightm

我遇到了一些困难,因为我不知道如何高效地编写代码。 我正在创建一个垂直滚动射击游戏&我想产生大量的敌人。 在地图的特定y坐标处&给他们一个特定的x坐标。 如果我用几个敌人进行测试,在我的敌人类中,我现在使用的代码如下所示:

 if (Background.bgY == -3972 && active == 0) {
active = 1;
type = 1;
centerX = enemyXstart4;
KnightmareGame.activated = 1;
KnightmareGame.activatedatY = Background.bgY;
} 
    g.drawImage(currentBomb, bo1.getCenterX(), bo1.getCenterY(), this);
    g.drawImage(currentBomb, bo2.getCenterX(), bo2.getCenterY(), this);
    g.drawImage(currentBomb, bo3.getCenterX(), bo3.getCenterY(), this);
它基本上寻找滚动背景是否在坐标Y,激活类型1的敌人(炸弹)并给它起始坐标centerX,activatedatY。 这意味着我在为每一个敌人写这段代码

然后在我的KnightmareGame类(在屏幕上绘制敌人的例程)中,我手动绘制每个敌人,如下所示:

 if (Background.bgY == -3972 && active == 0) {
active = 1;
type = 1;
centerX = enemyXstart4;
KnightmareGame.activated = 1;
KnightmareGame.activatedatY = Background.bgY;
} 
    g.drawImage(currentBomb, bo1.getCenterX(), bo1.getCenterY(), this);
    g.drawImage(currentBomb, bo2.getCenterX(), bo2.getCenterY(), this);
    g.drawImage(currentBomb, bo3.getCenterX(), bo3.getCenterY(), this);
在我的碰撞检测方法中,我也会逐个检查每个敌人:

if (projectileRect.intersects(KnightmareGame.bo1.bombRectangle)) {
        visible = false;            
        if (KnightmareGame.bo1.health > 0) {
            KnightmareGame.bo1.health -= 1;
        }
        if (KnightmareGame.bo1.health == 0) {
            Enemy.animateFire= true;
等等等等

问题是,我的敌人总数超过了50个,所以如果我继续一个接一个地编码,代码就会变得非常混乱

我当时想的是,我可能会制作一个数组列表,列出所有y坐标,在那里我想用它们随后的x坐标繁殖敌人。 例如在-3900,我想在x坐标200产生一个敌人。在-3800处,在x坐标300处,等等。所以一个数组列表,其中每个位置包含2个变量(x,y)

  • 我只是不知道(首先)如何为这个数组列表编码
  • 第二。我不知道如何像这样自动化我的绘图方法
    g.drawImage(currentBomb,bo1.getCenterX(),bo1.getCenterY(),this)
    我正在考虑一个循环,但不知道代码如何
  • 碰撞检测:在这里,我还为每个敌人在一个代码块中进行碰撞检测,而不是将单个单独代码块中的每个敌人与我的射弹进行比较
  • 有人知道怎么做吗?或者如果我应该换一种方式,那么我现在在想什么

    非常感谢您的帮助

    对付多个敌人 创建一个
    数组列表

    然后使用

    for (Enemy bo : enemies) {
        // logic for each enemy.
    }
    
    • 不要忘记在摧毁或离开屏幕后移除旧敌人
    • 不要每次都创建新对象。为了提高效率,使用一种新的方法

    提高碰撞效率 对于要检查碰撞的大量实体,通常使用

    看看你的情况是否需要

    您还可以尝试一些空间优化,如


    这些可能只是wiki链接,但我想如果您知道要搜索什么,您可以进一步搜索

    希望这有帮助。
    祝你好运