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

时间:2015-05-28 21:10:10

标签: java refactoring collision

我本来不会说英语,所以请耐心地说我和我的英语。我用碰撞方法制作了太空入侵者游戏。当子弹击中墙壁或敌人时,我应该把它们放在哪里?我应该为它们创建一个全新的类,还是只使用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;
}

非常感谢你!

1 个答案:

答案 0 :(得分:0)

哪些物品可以碰撞?如果子弹和其他对象之间只发生碰撞,则你的collide()方法属于表示项目符号的类。

我认为更有可能,并且从长远来看会更有用的是,你会遇到多种可能发生冲突的事情。也许子弹与船只碰撞,但最终你可能希望船只与其他船只或墙壁发生碰撞。在这种情况下,定义像这样的抽象类是有意义的

http://stackoverflow.com

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

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 {
    // ...
}