我有一个反复出现的问题,在过去的几年里一直在浮出水面,我想最终解决它。
所以我有一个 Android 游戏,有点像 Space Invaders(敌人在屏幕上移动)。我遇到的问题是 Surface View 支持不同的屏幕尺寸。显然,敌人移动的距离将取决于屏幕大小以保持相同的难度级别。所以我有一个宽度和高度的比率,我将所有内容乘以确保所有内容都绘制在与屏幕尺寸成比例的正确位置。如下所示:
posX += (int)(GameScreen.wRatio * speed + 0.5f);
这里明显的问题是 posX 是一个 int 并且我正在转换一个浮点数(因为绘制位图只需要 int 参数)。所以最终发生的事情是,在某些情况下,该位置将被四舍五入到下一个整数,从而使游戏比应有的速度更快。或者,在某些情况下 posX 被四舍五入为 0。
避免这种情况的最佳方法是什么?我可以假设总是以最小的增量(1),然后在每次更新游戏循环时跳过特定敌人的增量。但是,这需要对我的代码进行大量更改,我想在这样做之前听听可能有什么其他建议。