我在跟着尚学堂的Java课程在走,碰到一个飞机游戏的项目。有一个关于炮弹边界反弹的算法,一直有点问题。
理论上,当炮弹碰到边界左边后,反转原来的角度就可以让炮弹朝着另外一个方向飞行。
但是我的炮弹一旦角度比较靠近座标,然后炮弹就一直沿着x或者y左边来回飞。
因为角度在当炮弹碰到一个座标以后反转角度,然后就一直正负正负,就一直平行于座标飞行了。
但是我的代码和老师的代码是一致的,我想不通这个算法哪里有错。
``` Color oldColor = g.getColor();
g.setColor(Color.YELLOW);
g.fillOval(x, y, getWidth(), getHeight());
//c. 设置炮弹飞行到下一个位置(根据speed和飞行角度)
x += this.getSpeed() * Math.cos(degree) * x_Flag;
this.setX(x);
y += this.getSpeed() * Math.sin(degree) * y_Flag;
this.setY(y);
//d. 边界反弹 (碰到左边边界,则X<0,相反则X>0;同理上下)
if ( x < 0 || x > Constant.FRAME_LENGTH - this.getHeight()){
x_Flag *= -1;
}
if ( y < 30 || y > Constant.FRAME_WIDTH - this.getWidth()){
y_Flag *= -1;
}
g.setColor(oldColor);