cocos2d-x节点(b2DistanceJoint.h)API

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


你可能感兴趣的:(api,cocos2d,cocos2dx,cocos2d-x)