Box2D 中一米是多少像素?

how many pixels is a meter in Box2D?

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

Can you give me a simple expression or function to convert metres(of Box2D) to pixels or pixels to metres(of Box2D)?

不幸的是,这对我们来说并不像听起来那么简单。因为,如果你的游戏是蠕虫,那么你的游戏世界将以毫米为单位,而如果它像 Space Invaders 那么它将以公里为单位?因此,由游戏设计师决定这个比例因子。在不知道游戏的复杂性的情况下,推断这个因素充其量只是一个疯狂的猜测。

来自Box2D's faq

How do I convert pixels to meters?

Suppose you have a sprite for a character that is 100x100 pixels. You decide to use a scaling factor that is 0.01. This will make the character physics box 1m x 1m. So go make a physics box that is 1x1. Now suppose the character starts out at pixel coordinate (345,679). So position the physics box at (3.45,6.79). Now simulate the physics world. Suppose the character physics box moves to (2.31,4.98), so move your character sprite to pixel coordinates (231,498). Now the only tricky part is choosing a scaling factor. This really depends on your game. You should try to get your moving objects in the range 0.1 - 10 meters, with 1 meter being the sweet spot.

这里的比例因子是你设置的;你决定多少像素将构成你的游戏世界的一个单位。

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

You should consider using MKS units in your game code and just convert to pixels when you render. This will simplify your game logic and reduce the chance for errors since the rendering conversion can be isolated to a small amount of code.

本段也出现在手册中。

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