2

我的应用程序包含一个在表面视图上移动的对象。我可以通过加速度计移动它。这是播放器对象的移动代码:

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.

您可以在屏幕截图中看到 myY 值。在第一张照片上我 = ca。8 和第二个 ca。6.

有任何想法吗?

提前致谢

4

1 回答 1

2

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

x = Math.max(Math.min(x + mx*speed, GameView.WIDTH), 0.0f));
y = Math.max(Math.min(y + my*speed, GameView.HEIGHT, 0.0f));
于 2014-02-13T18:57:52.527 回答