gpt4 book ai didi

java - 如何在 Java 中高效地编写大量/多个敌人的生成和碰撞检测代码

转载 作者:行者123 更新时间:2023-11-29 08:50:50 24 4
gpt4 key购买 nike

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

 if (Background.bgY == -3972 && active == 0) {
active = 1;
type = 1;
centerX = enemyXstart4;
KnightmareGame.activated = 1;
KnightmareGame.activatedatY = Background.bgY;
}

如果滚动的背景在坐标 Y 上,它基本上是寻找,激活类型 1 的敌人(炸弹)并给它起始坐标 centerX,activatedatY。这意味着对于我编写此代码块的每个敌人...

然后在我的 KnightmareGame 类(它包含在屏幕上绘制敌人的例程)中,我手动绘制每个敌人,看起来像这样:

    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,所以如果我继续对它们 1 对 1 编码,代码会变得非常困惑。

我在想的是,我可能会制作一个包含所有 y 坐标的数组列表,我想在其中生成具有后续 x 坐标的敌人。例如,在 -3900 处,我想在 x 坐标 200 处生成一个敌人。在 -3800 处,在 x 坐标 300 处,等等。所以一个数组列表,其中每个位置都包含 2 个变量 (x,y)

  1. 我只是不知道(首先)如何为这个数组列表编写代码。
  2. 其次。我不知道如何自动化我的绘制方法g.drawImage(currentBomb, bo1.getCenterX(), bo1.getCenterY(), this);我正在考虑一个循环,但不知道代码如何...
  3. 碰撞检测:在这里,我还在一个代码块中为每个敌人进行碰撞检测,而不是将单个单独代码块中的每个敌人与我的射弹进行比较。

有人知道怎么做吗?或者,也许我应该以不同于我现在所想的方式来做?

非常感谢您的帮助!

最佳答案

处理多个敌人

创建一个 ArrayList<Enemy> enemies;

然后使用

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

提高碰撞效率

对于要检查碰撞的大量实体,通常是 broadphase algorithm被使用。

看看你的情况是否需要。

您也可以尝试一些空间优化,例如 quad-trees .


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

希望这对您有所帮助。
祝你好运。

关于java - 如何在 Java 中高效地编写大量/多个敌人的生成和碰撞检测代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22781713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com