Java 如何使图像沿x轴反弹?
我有一张图像,它以给定的速度在delta时间(dt)内水平移动。但问题是,当图像到达世界的尽头时,它不会反弹。我如何使图像向后反弹,以便将其保留在世界内部 任何帮助都可以 以下是我迄今为止所尝试的: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;
@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;