Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我必须重构代码,但不要';我不知道把碰撞法放在哪里_Java_Refactoring_Collision - Fatal编程技术网

Java 我必须重构代码,但不要';我不知道把碰撞法放在哪里

Java 我必须重构代码,但不要';我不知道把碰撞法放在哪里,java,refactoring,collision,Java,Refactoring,Collision,我不是土生土长的说英语的,所以请容忍我和我的英语。我用碰撞的方法做了一个太空入侵者游戏。因为当子弹击中墙壁或敌人时,我应该把它们放在哪里?我应该为他们创建一个全新的类,还是将碰撞方法放在敌人类和墙类的某个地方 这是目前我的敌人类中的一个碰撞方法,只是为了告诉你我的意思和我在做什么。我正在努力使代码清晰易读,易于重用 public boolean collide(int i, Player player, BasicBlocks blocks, ArrayList<Enem

我不是土生土长的说英语的,所以请容忍我和我的英语。我用碰撞的方法做了一个太空入侵者游戏。因为当子弹击中墙壁或敌人时,我应该把它们放在哪里?我应该为他们创建一个全新的类,还是将碰撞方法放在敌人类和墙类的某个地方

这是目前我的敌人类中的一个碰撞方法,只是为了告诉你我的意思和我在做什么。我正在努力使代码清晰易读,易于重用

 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;
}
public boolean collide(int i,Player-Player,basicblock块,
ArrayList(敌人){
if(enemySprite.isPlay()){
if(敌人.get(i).death场景()){
敌人。移除(i);
}
返回false;
}
对于(int w=0;w

非常感谢你

哪些项目会发生碰撞?如果只有项目符号和其他对象之间的碰撞,则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)
(在我看来)使
可碰撞
成为
接口
抽象类
好得多。几乎可以肯定的是,玩家和项目符号将有多个接口要实现,而它们只能扩展一个类。