cocos2d-x节点(CCPhysicsContact.h)API

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

cocos2d-x节点(CCPhysicsContact.h)API

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

///cocos2d-x-3.0alpha0/cocos2dx/physics
//两个物体接触的监听和处理


#include "CCPhysicsSetting.h"
#ifdef CC_USE_PHYSICS

#ifndef __CCPHYSICS_CONTACT_H__
#define __CCPHYSICS_CONTACT_H__

#include "cocoa/CCObject.h"
#include "cocoa/CCGeometry.h"

NS_CC_BEGIN

class PhysicsShape;
class PhysicsWorld;

class PhysicsContactInfo;

/**
 * @brief 联系信息,当两个形状相互接触时它会自动创建,当两个形状分离时,它会自动销毁.
 */
class PhysicsContact
{
public:
    /*
     * @brief get 形状 A 的联系.
     */
    inline PhysicsShape* getShapeA() { return _shapeA; }
    /*
     * @brief get 形状 B 的联系.
     */
    inline PhysicsShape* getShapeB() { return _shapeB; }
    /*
     * @brief get data.
     */
    inline void* getData() { return _data; }
    /*
     * @brief 设置联系数据. 你必须自己管理内存,一般来说,你可以在联系开始时设置数据,在联系结束时销毁数据
     */
    inline void setData(void* data) { _data = data; }
    
private:
    static PhysicsContact* create(PhysicsShape* a, PhysicsShape* b);
    bool init(PhysicsShape* a, PhysicsShape* b);
    
private:
    PhysicsContact();
    ~PhysicsContact();
    
private:
    PhysicsShape* _shapeA;
    PhysicsShape* _shapeB;
    PhysicsContactInfo* _info;
    void* _data;
    
    friend class PhysicsWorld;
};

/*
 * @brief 当调用 onContactPreSolve 时 会生成presolve值.
 */
class PhysicsContactPreSolve
{
private:
    PhysicsContactPreSolve();
    ~PhysicsContactPreSolve();
    
    static PhysicsContactPreSolve* create();
    bool init();
    
    friend class PhysicsWorld;
};

/*
 * @brief 当调用 onContactPostSolve 时 会产生 postsolve 值.
 */
class PhysicsContactPostSolve
{
private:
    PhysicsContactPostSolve();
    ~PhysicsContactPostSolve();
    
    static PhysicsContactPostSolve* create();
    bool init();
    
    friend class PhysicsWorld;
};

/*
 * @brief 联系监听器.
 */
class PhysicsContactListener
{
public:
    PhysicsContactListener();
    virtual ~PhysicsContactListener();
    
public:
    /*
     * @brief 两个形状开始接触时,它会调用,并只调用一次
     */
    std::function<bool(const PhysicsContact& contact)> onContactBegin;
    /*
     * @brief 在这一步骤里面两个形状碰触到一起. 回调函数 Return false 物理世界在这一步骤忽略碰撞 , true 通常进行处理,此外,您可能覆盖碰撞值 , elasticity, or surface velocity values  (弹性,或表面速度值)
     */
    std::function<bool(const PhysicsContact& contact, const PhysicsContactPreSolve& solve)> onContactPreSolve;
    /*
     * @brief 两个形状的接触和碰撞响应已处理。在这个时候,如果你想用它来计算音量或损失数量,你可以检测碰撞 脉冲/动能, 更多信息见 cpArbiter
     */
    std::function<void(const PhysicsContact& contact, const PhysicsContactPostSolve& solve)> onContactPostSolve;
    /*
     * @brief 两个形状分开时,它会调用,并只调用一次
     * onContactBegin 和 onContactEnd 总是成对的调用.
     */
    std::function<void(const PhysicsContact& contact)> onContactEnd;
};

NS_CC_END
#endif //__CCPHYSICS_CONTACT_H__

#endif // CC_USE_PHYSICS


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