我的应用程序包含一个在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;
    }


x和y是玩家的坐标

mx是玩家从加速度计获得的值,例如:向左倾斜时,mx为-2,向左倾斜时,mx为-4,-5,-6等。-> my与y轴

速度是一个变量,可以在我想要更快运动时进行修改和播放。

如您所见,我试图将移动限制为仅在播放器位于视图内部时移动。

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

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



在此图片上,您可以看到圆在底部并没有完全停止,因为圆和底部边框之间存在一些像素。当使用加速度计稍微向后移动时,圆圈将自身对准屏幕底部:



但是现在,我只能在缓慢移动时才能到达屏幕边界,这意味着mx或我的像素较低。

屏幕截图中您可以看到mY值。在第一张图片上,my =ca。 8和第二个ca。 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 - 加速物体的Android障碍物检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21760961/

10-13 09:48