Box2D中有多少像素是一米?

时间:2015-01-19 15:31:36

标签: 2d box2d transformation pixels sdl-2

问题很简单,没有代码!如果有人知道Box2D和SDL2,请告诉我如何用b2body包装SDL_Rect。当然,它需要知道米到像素的转换,反之亦然。这是因为Box2D以米为单位测量距离。你能给我一个简单的表达式或函数来将米(Box2D)转换为像素或像素到米(Box2D)吗?

2 个答案:

答案 0 :(得分:9)

  

你能给我一个简单的表达式或函数来将米(Box2D)转换为像素或像素转换为米(Box2D)吗?

不幸的是,对于我们来说,这并不像听起来那么简单。因为,如果你的游戏是在蠕虫上,那么你的游戏世界将以毫米为单位,而如果它像Space Invaders那么它将以千米为单位?所以由游戏设计师来决定这个缩放因子。在不知道游戏错综复杂的情况下,推断这个因素只是一个疯狂的猜测。

来自Box2D's faq

  

如何将像素转换为米?

     

假设您有一个100x100像素字符的精灵。您决定使用0.01的缩放因子。这将使角色物理盒1m x 1m。所以去做一个1x1的物理盒子。现在假设角色从像素坐标开始(345,679)。所以将物理盒置于(3.45,6.79)。现在模拟物理世界。假设角色物理盒移动到(2.31,4.98),因此将角色精灵移动到像素坐标(231,498)。现在唯一棘手的部分是选择缩放因子。这真的取决于你的游戏。你应该尝试让你的移动物体在0.1到10米的范围内,1米是最佳点。

此处缩放系数是您设置的;你决定有多少像素构成游戏世界的一个单元。

通常建议您在游戏世界单元中进行所有计算,最后,作为最后一步(渲染),转换为像素;同样在从外部引入数据(比如图像/精灵,以像素为单位)到世界空间之前,只进行一次反向转换,然后在其余代码中处理世界单位。有关此问题,请参阅Box2D的作者Erin Catto撰写的this article。摘录:

  

您应该考虑在游戏代码中使用MKS单位,并在渲染时转换为像素。这将简化您的游戏逻辑并减少出错的机会,因为渲染转换可以被隔离为少量代码。

本段也出现在手册中。

答案 1 :(得分:0)

每米2个像素?这是一个非常大的游戏世界。忽略DPI。这完全混淆了IMO的问题。最简单:您在真实世界坐标中建模(box2d在米上进行建模),并在libgdx术语中通过渲染时的视口进行映射。如果你的游戏世界太小,那么顶点碰撞可能会出现问题。