Box2d的世界宽高比与屏幕的宽和高有关

我有看法,例如扩展SurfaceView的GameView 。 我在GameView中整合了Box2D物理。 我有两个宽度,

GameView宽度,高度和Box2D物理世界的宽度,高度。 我需要用GameView坐标来获得box2d世界的位置。

例如,

屏幕总宽度= 240屏幕总高度= 320

屏幕点需要映射到box2d坐标(x,y)= 127,139

为此,我需要获得Box2d物理世界的最大宽度和高度。 有什么方法可以获得Box2d世界的最大宽度和高度?

要么

我可以限制在屏幕分辨率的box2d世界的宽度和高度。

您正试图将您的数据对象与您的可视对象混合。 为了这个问题的目的,这是一个很大的禁忌。

你的屏幕是一个可视对象,你的精灵/模型/等是可视对象。 那些很重要。 Box2D另一方面不是一个可视对象,所以没有神奇的直接映射。

你可以决定任意地将屏幕的左上角映射到Box2d中的0,0,并且每10个像素等同于Box2D中的1个单元。 对于你的数据模型,将工作得很好。

这里真正的问题是你的Box2D单元如何匹配你的视觉单位。 如果你有一个64×64的2D精灵恰好是一个盒子。 你的box2d广场有多大? 是1单位,10单位还是64单位?

你需要从你的屏幕转换到世界坐标。 这通常是通过“比例”因素和位置偏移来完成的。 对于testing平台,我使用Mat22(这意味着我可以旋转),中心位置和屏幕尺寸测量:

https://github.com/dmurph/jbox2d/blob/master/jbox2d-library/src/main/java/org/jbox2d/common/OBBViewportTransform.java