这是我在改造小行星的船上的子类代码。
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();
}
}
非常感谢任何帮助。
答案 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,注意箭头类型可能不正确,并且构造函数不存在。
在此示例中,循环方法将包含碰撞检查和对象推进。 循环还会检查玩家是否还活着,并检查arrayList中的每个镜头,看看玩家和镜头之间是否有碰撞。