这一节让我们来理解下Chipmunk2D中的销关节约束。
首先看文档中的一些解释
1 | cpPinJoint *cpPinJointAlloc(void) |
a和b是被连接的两个刚体,anchr1和anchr2是这两个刚体的锚点。当关节被创建的时候距离便被确定,如果你想要设定一个特定的距离,使用setter函数来重新设定该值。
getter/setter函数
- cpVect cpPinJointGetAnchr1(const cpConstraint *constraint)
- void cpPinJointSetAnchr1(cpConstraint *constraint, cpVect value)
- cpVect cpPinJointGetAnchr2(const cpConstraint *constraint)
- void cpPinJointSetAnchr2(cpConstraint *constraint, cpVect value)
- cpFloat cpPinJointGetDist(const cpConstraint *constraint)
- void cpPinJointSetDist(cpConstraint *constraint, cpFloat value)
在Cocos2DX中,销关节被封装成了PhysicsJointDistance
,我们先来看看该类头文件。
PhysicsJointDistance类
1 | /** Set the fixed distance with two bodies */ |
PhysicsJointDistance
这个名字和销关节的工作机制还是很贴切的。(在Box2D中也有距离关节,b2DistanceJoint)。当关节被创建的时候,刚体a和刚体b的锚点距离就被定了下来。假如后面我们要对该距离进行修改,可以通过setDistance()
方法来设定距离值。当设定的值不等于刚体之前的锚点间距时,我们会发现画面上刚体锚点的间距会发生突变,那是Chipmunk在按照你新设定的间距在修正。
1.注意:
anchr1
和anchr2
针对的是刚体a和刚体b的局部坐标系。2.注意:
PhysicsJointPin
可不是销关节,其实是枢轴关节(PivotJoint)!PhysicsJointDistance
才是我们这里说的销关节。
为了更好的理解销关节的工作机制,我做了几个演示来说明下:
图示1
图示2(多个销关节对绳索的模拟)
图示3