【发布时间】:2014-03-12 17:28:29
【问题描述】:
我的应用程序包含一个在表面视图上移动的对象。我可以通过加速度计移动它。 这是玩家对象的移动代码:
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 和第二个约。 6.
有什么想法吗?
提前致谢
【问题讨论】:
-
一两个屏幕截图可能有助于澄清您的问题。
-
添加了两张截图
-
可以在 Android Breakout (code.google.com/p/android-breakout) 中找到一些关于碰撞检测的喋喋不休。特别注意 GameState.java 中
findFirstCollision()顶部的 cmets —— 游戏以小增量向前移动球,并检查每一步。你不需要这个——你只需要担心四堵墙,所以代数会提供答案——但是如果你添加更多的物体来碰撞你可能需要类似的东西。 (如果碰撞发生在对象的边缘而不是中心,它也会变得更加复杂。)
标签: android game-physics collision acceleration