2013-07-24 64 views
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; 
    } 
    } 

正如你所看到的,我不知道如何返回公開的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(); 
    } 
    } 

任何幫助將不勝感激謝謝。

+0

那麼...什麼阻止你計算鏡頭的速度? –

+0

@DennisMeng我認爲它已經由SpaceObject超類'super(xPos,yPos,xVel,yVel,3)完成了;'......澄清需要@ user2613088 –

回答

2

因爲一槍沒有采取行動,它只會採取行動,應該不需要一個Shot來返回任何東西。

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

該方法的唯一目的是創建一個鏡頭的實例。因爲鏡頭可能來自與船舶相同的位置,所以您應該可以查詢鏡頭父項的屬性(我假設它是船舶)。

即使船舶向後行駛,我也認爲有一個鏡頭會向前移動,因此您需要獲取船的角度,並將其設置爲鏡頭的前角。

請記住,您可能在任何時候在屏幕上出現多個鏡頭實例。在這種情況下,你會想創建一個ShotList對象的arrayList。然後你會有另一個類/方法(Game.loop)遍歷整個對象列表,並向前推進。 http://www.tutorialspoint.com/java/java_encapsulation.htm

考慮以下UML,注意箭頭類型可能不正確,並且構造函數不存在。

enter image description here

在本例中環路的方法將包含碰撞檢測,並且對象的進步。 循環也會檢查玩家是否還活着,並檢查arrayList中的每一個鏡頭,看看玩家和鏡頭之間是否有碰撞。