您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x节点(b2DistanceJoint.h)API

2013-11-28 21:21 309 查看
本文来自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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: