我遇到了一些困难,因为我不知道如何编码效率。 我正在创建一个垂直滚动射击游戏&我想产生大量的敌人。 在地图的某些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,activateatY。 这意味着每个敌人都可以编写这段代码......
然后在我的KnightmareGame Class(其中包含了屏幕上绘制敌人的例程)我手动绘制每个敌人,这看起来像这样:
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);
我在考虑一个循环,但不知道代码是什么...... any1知道怎么做吗?或者也许如果我应该采用不同的方式,那么我现在正在考虑什么?
非常感谢帮助!
答案 0 :(得分:0)
创建ArrayList<Enemy> enemies;
然后使用
for (Enemy bo : enemies) {
// logic for each enemy.
}
对于大量要检查碰撞的实体,通常使用broadphase algorithm。
在您的情况下查看是否需要。
您也可以尝试一些空间优化,例如quad-trees。
这些可能只是维基链接,但我想如果你知道要搜索什么,你可以进一步搜索。
希望这有帮助。
祝你好运。