Android屏障检测加速对象

时间:2014-02-13 17:14:45

标签: 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;
    }

x和y是玩家的坐标

mx是玩家从加速度计获得的值,例如:当向左倾斜时,mx是-2,当倾斜更多时,mx是-4,-5,-6等 - &gt;我对y轴是相同的

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

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

现在我的问题是:集中地使设备倾斜到右侧时,MX变成像6.速度设置为5。这意味着,当玩家的位置+ 6 * 5比游戏更大查看它不应再动了。但是这会导致玩家停止视图右侧前方的像素......当向右轻微倾斜时,对象在视图的边界处完全停止...

现在我应该如何更改代码以实现一个对象,以便在屏幕边框处完美地停止它?

Image with intensively use of accelerometer

在这张照片上,您可以看到圆圈在底部没有停止,因为圆圈和底部边框之间有一些像素。当用加速度计略微向后移动时,圆圈将自己对准屏幕底部:

bottom of the screen

但是现在,我只能在慢慢移动时到达屏幕边框,这意味着mx低或我的。

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

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分: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));