【问题标题】:Bouncing an object off walls将物体弹离墙壁
【发布时间】:2014-03-11 02:50:33
【问题描述】:

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

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

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

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

【问题讨论】:

  • 看看this answer 是否有帮助。查看Ball 类中的animate 方法。

标签: java graphics jframe cube bounce


【解决方案1】:

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

【讨论】:

  • 这样的案例我很幸运我写了Bounds哈哈。
  • 仍然以最大帧宽来回弹跳
  • 那么你需要提供一个可运行的例子来证明你的问题
猜你喜欢
  • 2018-04-10
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
相关资源
最近更新 更多