0

これは、私が練習用に作成している小惑星リメイクの船のサブクラス コードです。

 package comets;

    public class Ship extends SpaceObject{

    protected double angle;
    protected double speed;
    public Ship(double xPos,double yPos,double xVel,double yVel){
        super(xPos, yPos, xVel, yVel, 10);
    }
    public void accelerate(){
        this.xVelocity+=.1*Math.sin(angle);
        this.yVelocity+=.1*Math.cos(angle);
    }   
    public double getSpeed(){
        return speed=Math.sqrt(Math.pow(this.xVelocity, 2)+Math.pow(this.yVelocity,2));
    }
    public Shot fire(){
        //need to return a shot
        return null;            
    }   
    public double getAngle(){
        return angle;       
    }
    public void rotateLeft(){
        angle+=.1;
    }

    public void rotateRight(){
        angle-=.1;
    }
   }

ご覧のとおり、public Shot fire() メソッドを返す方法がわかりません。現在、null を返していますが、ゲーム内の船が弾丸を発射できるように Shot を返す必要があります。ベローは、ショットのコンストラクターを定義したショット クラスです。

 package comets;

public class Shot extends SpaceObject{

    protected int counter=0;

    public Shot(double xPos,double yPos,double xVel,double yVel){
        super(xPos, yPos, xVel, yVel, 3);
    }
    public int getAge(){
        return counter;     
    }
    public void move(){
        counter++;
        super.move();
     }
   }

どんな助けでも大歓迎ですありがとう。

4

1 に答える 1

2

ショットは作用しないため、作用するだけなので、ショットが何かを返す必要はありません。

public void fire(){
    Shot aShot(foo,bar,foobar,foobarbar);
}

fire メソッドの唯一の目的は、ショットのインスタンスを作成することです。ショットは船と同じ場所から発信されている可能性が高いため、ショットの親の属性を照会できるはずです (船だと思います)。

船が後退していても、ショットは前進すると想定しているため、船の角度を取得し、それをショットの前方角度に設定する必要があります。

一度に複数のショットのインスタンスが画面に表示される可能性があることに注意してください。その場合、Shot オブジェクトの arrayList を作成する必要があります。次に、オブジェクトの完全なリストを反復処理し、前に進める別のクラス/メソッド (Game.loop) を作成します。 http://www.tutorialspoint.com/java/java_encapsulation.htm

次の UML を検討してください。矢印の型が正しくない可能性があり、コンストラクターが存在しないことに注意してください。

ここに画像の説明を入力

この例では、ループ メソッドに衝突チェックとオブジェクトの進行が含まれます。ループはまた、プレーヤーがまだ生きているかどうかを確認し、また、arrayList 内のすべてのショットをチェックして、プレーヤーとショットの間に衝突があるかどうかを確認します。

于 2013-07-24T05:49:56.830 に答える