我的应用包含一个在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比游戏更大查看它不应再动了。但是这会导致玩家停止视图右侧前方的像素......当向右轻微倾斜时,对象在视图的边界处完全停止...
现在我应该如何更改代码以实现一个对象,以便在屏幕边框处完美地停止它?
在这张照片上,您可以看到圆圈在底部没有停止,因为圆圈和底部边框之间有一些像素。当用加速度计略微向后移动时,圆圈将自己对准屏幕底部:
但是现在,我只能在慢慢移动时到达屏幕边框,这意味着mx低或我的。
截图可以看到mY值。在第一张照片上我= ca. 8和第二个ca. 6.
有什么想法吗?
提前致谢
答案 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));