cocos2d-x节点(b2MouseJoint.h)API

本文详细介绍了cocos2d-x中b2MouseJoint.h文件的API,讲解了如何使用b2MouseJoint将身体上的一个点与指定世界点进行跟踪,特别适合需要软约束且避免大力作用的场景。
摘要由CSDN通过智能技术生成

本文来自http://blog.csdn.net/runaying ,引用必须注明出处!

cocos2d-x节点(b2MouseJoint.h)API

温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记

//Mouse joints(接头)用于把 body上的一个点作为制定世界的跟踪点

/// 这是一个使用最大力的软约束,这个约束允许在不施加巨大力的情况下伸展

///cocos2d-x-3.0alpha0/external/Box2D/Dynamics/Joints
//Mouse joints(接头)用于把 body 上的一个点作为制定世界的跟踪点
/// 这是一个使用最大力的软约束,这个约束允许在不施加巨大力的情况下伸展


#ifndef B2_MOUSE_JOINT_H
#define B2_MOUSE_JOINT_H

#include <Box2D/Dynamics/Joints/b2Joint.h>

/// Mouse joints(接头)定义. 这需要一个 world target(目标) point,
/// 调节参数,时间步长
struct b2MouseJointDef : public b2JointDef
{
    b2MouseJointDef()
    {
        type = e_mouseJoint;
        target.Set(0.0f, 0.0f);
        maxForce = 0.0f;
        frequencyHz = 5.0f;
        dampingRatio = 0.7f;
    }

    /// 初始化 world target(目标) point. 这假设 body 的锚点开始重合
    b2Vec2 target;

    /// 约束可以施加给移动候选体的最大力
    /// 通常你会使用多个weight(重量)表示
        float32 maxForce;

    /// 响应速度
    float32 frequencyHz;

    /// 阻尼比率. 0 = no 阻尼, 1 = 临界阻尼。.
    float32 dampingRatio;
};

/// Mouse joints(接头)用于把 body 上的一个点作为制定世界的跟踪点
/// 这是一个使用最大力的软约束,这个约束允许在不施加巨大力的情况下伸展
/// NOTE: 这个 joints(接头)没有手动记录,因为他是在 testbed(测试平台)里面用作开发的
/// 如果你想学习如何使用鼠标 joints(接头),请查看  testbed(测试平台)
class b2MouseJoint : public b2Joint
{
public:

    /// Implements b2Joint.     //实现
    b2Vec2 GetAnchorA() const;

    /// Implements b2Joint.
    b2Vec2 GetAnchorB() const;

    /// Implements b2Joint.
    b2Vec2 GetReactionForce(float32 inv_dt) const;

    /// Implements b2Joint.
    float32 GetReactionTorque(float32 inv_dt) const;

    /// 使用这个更新target(目标) point
    void SetTarget(const b2Vec2& target);
    const b2Vec2& GetTarget() const;

    /// Set/get 最大力,以牛顿为单位.
    void SetMaxForce(float32 force);
    float32 GetMaxForce() const;

    /// Set/get 频率(以赫兹为单位)
    void SetFrequency(float32 hz);
    float32 GetFrequency() const;

    /// Set/get 阻尼比率 (dimensionless).   //量纲
    void SetDampingRatio(float32 ratio);
    float32 GetDampingRatio() const;

    /// mouse joints(接头)不支持 dumping(阻尼)
    void Dump() { b2Log("Mouse joint dumping is not supported.\n"); }

protected:
    friend class b2Joint;

    b2MouseJoint(const b2MouseJointDef* def);

    void InitVelocityConstraints(const b2SolverData& data);
    void SolveVelocityConstraints(const b2SolverData& data);
    bool SolvePositionConstraints(const b2SolverData& data);

    b2Vec2 m_localAnchorB;
    b2Vec2 m_targetA;
    float32 m_frequencyHz;
    float32 m_dampingRatio;
    float32 m_beta;
    
    // Solver shared
    b2Vec2 m_impulse;
    float32 m_maxForce;
    float32 m_gamma;

    // Solver temp
    int32 m_indexA;
    int32 m_indexB;
    b2Vec2 m_rB;
    b2Vec2 m_localCenterB;
    float32 m_invMassB;
    float32 m_invIB;
    b2Mat22 m_mass;
    b2Vec2 m_C;
};

#endif


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值