Box2D使用MKS(米,千克,秒)的单位和弧度的角度。你或许有很多麻烦在使用米单位的时候,因为你的游戏用的是像素单位。为了解决这个问题我们在testbed平台上,我以米为单位计算,然后使用一个OpenGL视口变换到屏幕空间来缩放世界坐标。
float lowerX = -25.0f, upperX = 25.0f, lowerY = -5.0f, upperY = 25.0f;
gluOrtho2D(lowerX, upperX, lowerY, upperY);
如果你的游戏必须以像素为单位工作,那么你应该转换成像素的长度单位为米当传递参数给Box2D。同样,你应该把从Box2D得到的数据米单位转换成像素单位。这将提高改善物理模拟的稳定性。
你必须拿出一个合理的转换因子。我建议把这样的选择基于你的角色的大小。假设你已经决定使用50像素每米(因为你的精灵角色是75像素高)。然后,您可以从像素转换为米使用这些公式:
xMeters = 0.02f * xPixels;
yMeters = 0.02f * yPixels;
在反向:
xPixels = 50.0f * xMeters;
yPixels = 50.0f * yMeters;
在你的游戏的代码,你应该考虑使用MKS单位转换为像素渲染时。这将简化你的游戏逻辑,并减少出错的机会,因为渲染可以分离到少量的代码转换。
如果你使用一个转换因子,你应该尝试调整它在全局范围,以确保没有任何错误。您也可以尝试调整,以提高稳定性。