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 以便游戏中的船可以射击子弹。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();
     }
   }

任何帮助将不胜感激,谢谢。

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 回答