所以我有这个立方体我希望从墙上反弹,(现在只是x轴)然而它会移动 当它到达框架的末端时,它来回移动而不是向相反的方向移动。
public void moveBox(int dx,int dy)
{
if(xLeft < 0 || xLeft > frame_width)
{
dx = -dx;
}
xLeft = xLeft + dx;
repaint();
}
如果xLeft(也就是多维数据集的原始坐标通过框架),那么我从代码中理解的是,然后dx(它被移动的速度)变为负值,这应该翻转方向。当它回到零时,双重否定会将其重新转为正数。我的逻辑是有缺陷的,因为它没有在框架结束时反复浮动它
然而事实并非如此,我不明白为什么会这样,因为每次使用不同的xLeft值调用该方法?如果是这样的话我该怎么办才能让它反弹?我已经尝试了很多不同的东西似乎没有完全反弹
答案 0 :(得分:1)
xLeft
可能仍然不在界限范围内,这意味着它会不断进入if
声明。
如果delta小于对象通过边界的量,则会发生这种情况。
您可以考虑将对象放回边界的边缘,例如
if(xLeft < 0 || xLeft > frame_width)
{
dx = -dx;
}
if (xLeft < 0)
{
xLeft = 0;
}
else if (xLeft > frame_width)
{
xLeft = frame_width;
}
else
{
xLeft = xLeft + dx;
}
如果您愿意,可以删除else
部分,只需将xLeft
移动到delta ...