gpt4 book ai didi

java - 我必须重构我的代码,但不知道将碰撞方法放在哪里

转载 作者:行者123 更新时间:2023-12-03 18:27:05 25 4
gpt4 key购买 nike

我的母语不是英语,所以请容忍我和我的英语。我用碰撞方法制作了一个太空入侵者游戏。因为当子弹打到墙壁或敌人时,我应该把它们放在哪里?我应该为它们创建一个全新的类还是将碰撞方法放在 Enemy 类和 Wall 类的某个地方?

目前这是我的 Enemy 类中的一个碰撞方法,只是为了向您展示我的意思和我在做什么。我正在努力编写可以轻松重用的简洁易读的代码。

 public boolean collide(int i, Player player, BasicBlocks blocks,
ArrayList<EnemyTypeBasic> enemies) {
if (enemySprite.isPlay()) {
if (enemies.get(i).deathScene()) {
enemies.remove(i);

}
return false;
}
for (int w = 0; w < player.playerWeapons.weapons.size(); w++) {
if (enemies != null
&& player.playerWeapons.weapons.get(w).collisionRectangle(
((EnemyTypeBasic) enemies.get(i)).getRect())) {
enemySprite.resetLimit();
enemySprite.setAnimationSpeed(120);
enemySprite.setPlay(true, true); // Object needs to be destroyed
GameScreen.SCORE += 8;
GameScreen.lives = 3;
return true;
}
}
return false;
}

非常感谢!

最佳答案

哪些元素可以碰撞?如果唯一的碰撞发生在子弹和其他对象之间,则您的 collide() 方法属于表示子弹的类。

我认为更有可能并且从长远来看更有用的是,您将拥有多个可以相互碰撞的事物。也许子弹会与船只相撞,但最终您可能希望船只与其他船只或墙壁相撞。在这种情况下,像这样定义一个抽象类是有意义的

public abstract class Collidable {

public boolean collide(Collidable other) {
// Here is your logic to check whether *this* is colliding with *other*
// You will probably need to pass in additional arguments to determine collisions
}

}

然后所有可能与其他类型发生冲突的类型都扩展了您的抽象类,例如:

public Player extends Collidable {
// ...
}

public EnemyTypeBasic extends Collidable {
// ...
}

public Bullet extends Collidable {
// ...
}

当你想检查两个东西是否发生碰撞时,你可以调用这个或等价物:

aBullet.collide(anEnemy)

关于java - 我必须重构我的代码,但不知道将碰撞方法放在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30517153/

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