问题很简单,所以没有代码!如果有人知道Box2D和SDL2,请告诉我如何用b2body包装SDL_Rect。当然,它需要知道仪表到像素的转换,反之亦然。这是因为Box2D以米为单位测量距离。您能给我一个简单的表达式或函数来将Box2D的米转换为像素,还是将Box2D的米转换为像素吗?
最佳答案
您能给我一个简单的表达式或函数来将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单位,并且在渲染时仅将其转换为像素。由于可以将渲染转换隔离为少量代码,因此这将简化您的游戏逻辑并减少出错的机会。
此段也出现在手册中。
关于2d - Box2D中的仪表多少米?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28028121/