我正在玩SFML和Box2D,在SFML中,形状的位置由其左上角定义。此外,SFML 根据 (0, 0( 作为屏幕的左上角、向右延伸的 x 轴和向下延伸的 y 轴来处理坐标。
所以,我有两个问题。
Box2D 是否有原点在特定的地方(如左上角或中心(的概念,因为它渲染不可知?
我在某处读到,设置身体的位置集是对象的中心与左上角,就像 SFML 一样。这是真的吗?例如:
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0.0f, -10.0f);
这是否意味着主体居中为 (0, -10( 或它的左上角位于 (0, -10(?
Box2D 处理位置和坐标,就好像它们是距离世界原点的水平和垂直米一样。换句话说,b2Vec2(2.0f, 3.0f)
的坐标表示原点右侧 2 米、原点上方 3 米的点(假设右侧为正 X,顶部为正 Y 的视觉表示(。正如您指出的那样,左和右以及上下是可以互换的,因为它是渲染不可知的,但是如果您将b2Vec2(2, 3)
坐标与b2Vec2(0, -10)
重力配对,并按照描述直观地表示坐标,那么动态物体将在视觉上向下加速,假设没有任何阻碍可以阻止它。
设置物体的位置会设置它相对于世界原点的位置。它还为与主体关联的形状(通过夹具(提供排序本身的原点,因为用于形状的坐标是相对于其关联主体的位置的
。在回答最后一个问题时,将groundBodyDef
位置设置为(0.f, -10.0f)
意味着使用groundBodyDef
创建的实体将定位在(0.f, -10.0f)
处,并且附加到该实体的任何形状都将相对于该位置。在我看来,将其视为中心本身似乎并没有错;至少没有比将 (0, 0( 的 2-D 原点视为图形中心更错误。你可能会在从中心的角度思考时遇到麻烦,但是如果你在质量方面混淆了位置和中心。
希望这有帮助。