Java 如何使图像沿x轴反弹?

Java 如何使图像沿x轴反弹?,java,swing,awt,Java,Swing,Awt,我有一张图像,它以给定的速度在delta时间(dt)内水平移动。但问题是,当图像到达世界的尽头时,它不会反弹。我如何使图像向后反弹,以便将其保留在世界内部 任何帮助都可以 以下是我迄今为止所尝试的: @Override public void move(long dt) { // v = dx / dt // dx m = v m/s . dt s double dt_s = dt / 1e9; double dx_m = speed * dt_s;

我有一张图像,它以给定的速度在delta时间(dt)内水平移动。但问题是,当图像到达世界的尽头时,它不会反弹。我如何使图像向后反弹,以便将其保留在世界内部

任何帮助都可以

以下是我迄今为止所尝试的:

@Override
public void move(long dt)
{
    // v = dx / dt
    //   dx m = v m/s  . dt s

    double dt_s = dt / 1e9;
    double dx_m = speed * dt_s;


    double left_wall = 0;
    double right_wall = board.x1_world;

    if (x <= right_wall)
    {
        x += dx_m;
        if (x >= right_wall)
        {

            x = right_wall;
           x *= -dx_m;
        }
    }
}
@覆盖
公共无效移动(长dt)
{
//v=dx/dt
//dx m=v m/s.dt s
双dt_s=dt/1e9;
双dx_m=速度*dt_s;
双左墙=0;
双右墙=board.x1_world;
如果(x=右墙)
{
x=右墙;
x*=-dx_m;
}
}
}
私有布尔goleft=false//保持方向
@凌驾
公共无效移动(长dt)
{
//v=dx/dt
//dx m=v m/s.dt s
双dt_s=dt/1e9;
双dx_m=速度*dt_s;
双左墙=0;
双右墙=board.x1_world;
如果(高尔夫)x+=dx_m;
否则x-=dx_m;
如果(x>=右_墙)//触摸1墙
{
x=右墙;
x+=dx_m;
高尔夫=真;
}else if(x)

而不仅仅是
x>=右墙
,因为这样做,图像在“触摸”时会反弹世界的尽头。

除了按照@Oscar的建议分别检查每一端之外,您可能需要考虑图像的有限宽度,如本模拟所示。

这是一个与摆动相关的问题吗?我在这里没有看到摆动调用。。。
private boolean goleft=false;//keep direction
@Override
public void move(long dt)
{
    // v = dx / dt
    //   dx m = v m/s  . dt s

    double dt_s = dt / 1e9;
    double dx_m = speed * dt_s;

    double left_wall = 0;
    double right_wall = board.x1_world;

    if(goleft)x += dx_m;
    else x-= dx_m;

    if (x >= right_wall)//touching 1 wall
    {
        x = right_wall;
        x += dx_m;
        goleft=true;
    }else if(x<=left_wall){//touching the other wall
        x = left_wall;
        x += dx_m;
        goleft=false;
    }
}
    @Override
public void move(long dt)
{
    double dt_s = dt / 1e9;
    double dx_m = speed * dt_s;


    double left_wall = 0;
    double right_wall = board.x1_world;

    x += dx_m;
    if (x <= 0) speed *= -1.0;
    if (x >= right_wall) speed *= -1.0;
}
if (x >= (right_wall - width_of_image)) speed *= -1.0;