我想知道如何将灯具放在另一个灯具旁边。顺便说一句。我可能很困惑自己。 所以这就是我想要做的: LIKE THIS ILLUSTRATION
我可以通过将leftWall + sizeX / 2的leftWall + sizeX / 2的positionX的总和应用到爬墙的方框来实现这一目的吗?或者是否有一些box2d函数可以自动计算位置? 完成此操作后,我将为盒子添加一个恒定的速度,因此我需要它是精确的加上它看起来更好的事实。我太困惑了自己,我不知道怎么会有人告诉我他们会做什么? 谢谢!非常感谢!
答案 0 :(得分:1)
选择“总和” 我不认为这是一个问题 如果你真的不喜欢它,那就写下你自己的功能吧 如你所知,这并不难。
Box2D不是建筑图书馆
据我所知,没有这样的功能
在3D物理和图形学中,我也遇到了这样的不便。
我有两种选择: -
我通常选择其中一个选择,取决于具体情况 因为这只是一点点不便,我相信第一个适合你的情况。
顺便说一句,there are reserved margin between colliding fixtures,所以我认为你无法确定准确的位置。
默认情况下,夹具周围总是有一小块空间。
答案 1 :(得分:1)
对正在发生的事情的解释......
对于静态和运动物体,放置它们的地方就是它们所在的位置。换句话说,如果您使用b2Body::SetTransform
的位置拨打pos
,然后拨打b2Body::GetPosition
,则返回的值应该等于pos
。即使这些物体彼此重叠,这也应该成立。除非你告诉他们,否则他们不会动。
然而,动态物体的行为却不同。它们的行为更像我们期望固体在现实世界中表现。但是我们仍然可以对他们做些事情,但实际上对于真正的固体物体却无法实现。例如,我们可以在一个动态主体上调用b2Body::SetTransform
将其(或部分)放在另一个主体中。现在,物理引擎可以找出移动动态物体的位置,使其不再位于其他物体内(并且考虑到初始重叠可能看起来似乎足够合理)。
更准确地说,2.3.2 Box2D库将解决两个实体(其中一个或两个是动态的)的重叠,以及b2_maxLinearCorrection
每个位置迭代的重叠,直到minSeparation >= -3.0f * b2_linearSlop
minSeparation
分隔平面中最接近顶点(两个形状)的距离减去两个顶点半径的总和(两个形状)。 “顺序求解器”通过脉冲实现这一点,但不会影响体速值,因此两个身体都不会像任何额外的动量那样起作用。
您可以查看b2ContactSolver.cpp
文件的b2ContactSolver::SolvePositionConstraints
方法中涉及的代码。
所以从某种意义上说,Box2D世界步骤“为您计算位置”。但请注意以下警告:
m_radius
值的值相加。这被称为保留的空间边界。对于两个多边形,这将是4.0f * b2_linearSlop
或0.02f
(2厘米)。如果将对象精确地放在另一个旁边,那么: