这种方法的正确回报是什么?

时间:2013-07-24 05:10:15

标签: java abstract

这是我在改造小行星的船上的子类代码。

 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以便游戏中的船可以射击子弹。 Bellow是一个镜头类,我有定义镜头的构造函数。

 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();
     }
   }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

因为一个镜头不起作用,它只是作用,所以不需要一个镜头来返回任何东西。

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

fire方法的唯一目的是创建一个镜头的实例。因为镜头可能来自与Ship相同的位置,所以您应该能够查询镜头的父级属性(我假设它是船)。

我认为即使船向后行驶,射击也会向前移动,因此您需要获得船的角度,并将其设置为射击的前倾角。

请记住,任何时候您都可能在屏幕上有多个镜头实例。在这种情况下,您需要创建Shot对象的arrayList。然后,您将拥有另一个类/方法(Game.loop),它遍历完整的对象列表,并向前推进它们。 http://www.tutorialspoint.com/java/java_encapsulation.htm

考虑以下UML,注意箭头类型可能不正确,并且构造函数不存在。

enter image description here

在此示例中,循环方法将包含碰撞检查和对象推进。 循环还会检查玩家是否还活着,并检查arrayList中的每个镜头,看看玩家和镜头之间是否有碰撞。