加速物体的Android障碍检测

加速物体的Android障碍检测,android,game-physics,collision,acceleration,Android,Game Physics,Collision,Acceleration,我的应用程序包含一个在surfaceview上移动的对象。我可以通过加速计移动它。 以下是玩家对象的移动代码: if(x + mx*speed > 0 && x + mx*speed < GameView.WIDTH) { x += mx*speed; } if(y+ my*speed > 0 && y+ my*speed < GameView.HEIGHT) { y+=my*speed; }

我的应用程序包含一个在surfaceview上移动的对象。我可以通过加速计移动它。 以下是玩家对象的移动代码:

if(x + mx*speed > 0 && x + mx*speed < GameView.WIDTH) {
        x += mx*speed;
    }
if(y+ my*speed > 0 && y+ my*speed < GameView.HEIGHT) {
        y+=my*speed;
    }
if(x+mx*速度>0&&x+mx*速度0&&y+my*速度
x和y是玩家的坐标

mx是播放器从加速计获得的值,例如:向左倾斜时,mx为-2,再向左倾斜时,mx为-4,-5,-6等-->my与y轴相同

速度是一个变量,当我想有一个更快的运动时,可以修改和播放

正如你所看到的,我试图将移动限制为仅当玩家在视图内时移动

现在我的问题是:当设备向右倾时,mx会变成6。速度设置为5。这意味着,当玩家的位置+6*5大于游戏视图时,它不应再移动。但这会导致播放器在视图右侧前面停止像素。。。当轻轻向右倾斜时,对象完全停在视图的边界处

现在,我应该如何更改代码来实现一个对象,使其在屏幕边界处完全停止移动

在这张图片上,你可以看到圆圈没有完全停在底部,因为圆圈和底部边界之间有一些像素。当使用加速计稍微返回时,圆圈将自身与屏幕底部对齐:

但现在,我只能在缓慢移动时到达屏幕边界,这意味着使用低mx或我的

屏幕截图,你可以看到我的价值观。在第一张图片上,my=约8,在第二张图片上,约6

有什么想法吗


提前感谢

尝试将值限制在边框上,就像这样

x = Math.max(Math.min(x + mx*speed, GameView.WIDTH), 0.0f));
y = Math.max(Math.min(y + my*speed, GameView.HEIGHT, 0.0f));

一两个屏幕截图可能有助于澄清您的问题。添加了两个屏幕截图在Android Breakout()中可以找到一些关于碰撞检测的胡言乱语。特别要注意GameState.java中
findFirstCollision()
顶部的注释——游戏以小的增量将球向前移动,每一步都进行检查。你不需要这个——你只需要担心四堵墙,所以代数将提供答案——但是如果你添加更多的物体来碰撞,你可能需要类似的东西。(如果碰撞发生在对象的边缘而不是中心,那么它也会变得更复杂。)要尝试一下,谢谢!编辑:作品很棒!但不幸的是,它只在屏幕的右边和底部起作用。。。你有没有关于如何实施这两方面的建议?当然有。我添加了一些代码来处理这个问题。不过有点老套。此时,您可能需要创建自己的方法,称为
cap
或类似的方法。工作起来很有魅力!非常感谢。(完全没有想到Math.min或Math.max)@user2410644以前你的代码的问题是太靠近边缘了,你根本没有改变位置,让对象离墙很近。使用
Math.min
您将更新靠近边缘的位置,但决不在其上移动。