我的第一个项目是用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;

使用dxdy,我更改了乒乓球的xy的位置。
我在这里画乒乓球。
g.setColor(Color.WHITE);
g.fillOval(this.posX, this.posY, 25, 25);

如果我希望dxdy更准确,则必须将delta_ydelta_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代码等)

08-05 08:10