我正在为 Android 开发一个非常简单的物理游戏,其中一个物体在一定的重力作用下上下弹跳(0 摩擦,球应该始终达到相同的高度)。我希望它在所有设备上达到相同的高度(密度独立性)。我的游戏使用以下代码进行物理编码,在 540 * 960 设备上运行良好。
注意:我的游戏的最大 FPS 为 30
物理代码
//Instance variables
private final float acceleration = .1f;
private static float timePoint;
private float velocityY = 0;
//game loop code
timePoint += 1;//updates every tick
velocityY = velocityY - acceleration * timePoint;
position.y = (int) (position.y - velocityY);
if(position.y + bitMapHeight <= 0){
velocityY = 30;
timePoint = 0;
}
当球撞击地面时 (y = 0),我只是应用了 30 的速度,这使得球在 540 * 960 设备上达到了所需的高度。当然,多种设备会导致严重的问题,而这个公式并不适合所有设备。我认为最好的方法是以某种方式根据屏幕高度计算速度,但我不确定对于这样的事情最好的方法是什么。下面是一些屏幕截图,显示发生了什么。
如果有人能指出正确的方向,我将不胜感激!如果需要更多详细信息,请告诉我。
最佳答案
我不得不在不久前开发的 2D 游戏中解决类似的问题。
我在自己的 Android 设备上开发了初始物理和渲染功能,直到它在该特定设备上表现良好。然后我获得了相关变量的“基线”值(例如 bjb568 提到的像素:米),以在我的基线设备上实现正确的速度。
然后,为了让游戏在不同的设备/屏幕上以相同的方式运行,我简单地使用了按实际屏幕分辨率和基线屏幕分辨率的比例缩放的基线值。
我的游戏使用了 SurfaceView,因此“实际屏幕分辨率”基本上由表面的宽度和高度决定。
希望对您有所帮助。
关于android - 计算速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23165305/