所以我有这个立方体,我想从墙壁上弹开,(但现在只是x轴)
当到达帧的末尾时,它来回移动而不是相反的方向。

    public void moveBox(int dx,int dy)
{
    if(xLeft < 0 || xLeft > frame_width)
    {
        dx = -dx;
    }
    xLeft = xLeft + dx;
    repaint();
}


这就是我从代码中了解的内容,如果xLeft(又称多维数据集的原点坐标)通过帧,然后dx(即其移动速度)变为负数,则应该反转方向。当它回到零时,双重负数会将其翻转回正数。我的逻辑有缺陷,因为它没有反弹,只是在帧的末尾来回浮动

但是事实并非如此,我不明白为什么会这样,因为每次使用不同的xLeft值调用该方法时?如果是这种情况,我应该怎么做使其弹跳?我尝试了很多不同的东西,似乎没有什么可以完全反弹

最佳答案

评估后,xLeft可能仍然超出范围,这意味着它将连续滑入if语句。

如果增量小于对象通过边界的数量,则会发生这种情况。

您可能考虑将对象放回边界的边缘,例如

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移开增量...

关于java - 从墙壁弹起物体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22315518/

10-09 22:45