本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
cocos2d-x节点(b2DistanceJoint.h)API
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
//距离joints(接头)的定义,用来约束两个 body上的两个点,以保证彼此保持在一个固定的距离
///cocos2d-x-3.0alpha0/external/Box2D/Dynamics/Joints //距离joints(接头)的定义,用来约束两个 body 上的两个点,以保证彼此保持在一个固定的距离 #ifndef B2_DISTANCE_JOINT_H #define B2_DISTANCE_JOINT_H #include <Box2D/Dynamics/Joints/b2Joint.h> /// 距离joints(接头) 的定义. 这需要再两个 body 上定义一个锚点,joints(接头)的距离不可以是 0 //定义使用本地锚点,所以初始配置可以稍微违反约束。这有助于保存和加载游戏 /// @warning不要使用长度为零或跟短的长度。 struct b2DistanceJointDef : public b2JointDef { b2DistanceJointDef() { type = e_distanceJoint; localAnchorA.Set(0.0f, 0.0f); localAnchorB.Set(0.0f, 0.0f); length = 1.0f; frequencyHz = 0.0f; dampingRatio = 0.0f; } /// 初始化 bodies, anchors(锚点), and length using the world /// anchors(锚点). void Initialize(b2Body* bodyA, b2Body* bodyB, const b2Vec2& anchorA, const b2Vec2& anchorB); /// 本地锚点相对与 bodyA's 原点. b2Vec2 localAnchorA; /// 本地锚点相对与 bodyB's 原点. b2Vec2 localAnchorB; /// 两个锚点之间的自然长度 float32 length; /// The mass-spring-damper(质量-弹簧-阻尼) 频率以赫兹为单位. 将值设置为0 禁用柔软度 float32 frequencyHz; /// 阻尼系数. 0 = 没有阻尼, 1 = 临界阻尼 float32 dampingRatio; }; //一个距离joints(接头),约束两个 body 上的两个点,以保证彼此保持在一个固定的距离 /// 你可以认为这是一个无质量刚性杆 class b2DistanceJoint : public b2Joint { public: b2Vec2 GetAnchorA() const; b2Vec2 GetAnchorB() const; /// 逆转时间步得到反作用力 /// Unit is N. b2Vec2 GetReactionForce(float32 inv_dt) const; //逆转时间步得到反作用力矩 joints(接头)之间的距离通常是 0 /// Unit is N*m. float32 GetReactionTorque(float32 inv_dt) const; /// 相对与 bodyA's 原点的本地锚点. const b2Vec2& GetLocalAnchorA() const { return m_localAnchorA; } /// 相对与 bodyB's 原点的本地锚点. const b2Vec2& GetLocalAnchorB() const { return m_localAnchorB; } /// Set/get the natural(自然) length. /// 频率是零时,操纵这个长度可导致非物理行为 void SetLength(float32 length); float32 GetLength() const; /// Set/get 频率(Hz). void SetFrequency(float32 hz); float32 GetFrequency() const; /// Set/get damping(阻尼)系数. void SetDampingRatio(float32 ratio); float32 GetDampingRatio() const; ///把 joints(接头)的阻尼输出到 dmLog void Dump(); protected: friend class b2Joint; b2DistanceJoint(const b2DistanceJointDef* data); void InitVelocityConstraints(const b2SolverData& data); void SolveVelocityConstraints(const b2SolverData& data); bool SolvePositionConstraints(const b2SolverData& data); float32 m_frequencyHz; float32 m_dampingRatio; float32 m_bias; // Solver(运算器) shared(共享) b2Vec2 m_localAnchorA; b2Vec2 m_localAnchorB; float32 m_gamma; float32 m_impulse; float32 m_length; // Solver(运算器) temp(临时) int32 m_indexA; int32 m_indexB; b2Vec2 m_u; b2Vec2 m_rA; b2Vec2 m_rB; b2Vec2 m_localCenterA; b2Vec2 m_localCenterB; float32 m_invMassA; float32 m_invMassB; float32 m_invIA; float32 m_invIB; float32 m_mass; }; inline void b2DistanceJoint::SetLength(float32 length) { m_length = length; } inline float32 b2DistanceJoint::GetLength() const { return m_length; } inline void b2DistanceJoint::SetFrequency(float32 hz) { m_frequencyHz = hz; } inline float32 b2DistanceJoint::GetFrequency() const { return m_frequencyHz; } inline void b2DistanceJoint::SetDampingRatio(float32 ratio) { m_dampingRatio = ratio; } inline float32 b2DistanceJoint::GetDampingRatio() const { return m_dampingRatio; } #endif