我的第一个项目是用Java制作Pong游戏。
因为我需要计算x
位置和y
位置的增量,所以我认为最好的方法是使用双变量(如果我错了,请问问)。但是您不能使用double在lib java.awt.*
中填充形状。
在这里,我计算了球击中桨后的角度
int c = (int) Math.atan2(ball.getPosY(), ball.getPosX());
int delta_x = (int) (1 * Math.cos(c));
int delta_y = (int) (1 * Math.sin(c));
this.dx += delta_x;
this.dy += delta_y;
使用
dx
和dy
,我更改了乒乓球的x
和y
的位置。我在这里画乒乓球。
g.setColor(Color.WHITE);
g.fillOval(this.posX, this.posY, 25, 25);
如果我希望
dx
和dy
更准确,则必须将delta_y
和delta_x
的类型更改为两倍。但是
fillOval()
不适用于双变量。那么我是否必须用geom.Point2D.Double
制作图形? 最佳答案
对增量使用双精度值,但将最终坐标转换为整数。
像这样(在伪代码样式中):
int delta_x=1.3, delta_y=-0.4
public void update(){
double x=(pong_ball.getX()+delta_x);
double y=(pong_ball.getY()+delta_y);
pong_ball.setX(x);
pong_ball.setY(y);
}
// in the pong_ball code
public void paint(Graphics g){
paintBall((int) x, (int) y);
}
编辑:对不起,我意识到一个错误。如果增量足够小,则球将不会移动!因此,您还需要将球的坐标存储为双精度,并且仅在最终绘制球时才进行投射...对不起
编辑2:请注意,上面的代码不可编译。您需要更多代码(例如实际的x-y字段,jframe代码等)