2013-07-24 53 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中的每一个镜头,看看玩家和镜头之间是否有碰撞。