本文来自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