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

cocos2d-x节点(b2ChainShape.h)API

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

 链形状,链形状是一个自由形式的序列的线段,链具有双面碰撞,故你可以使用内部或者外部碰撞。
// 链形状提供了一种高效的方法来同时连接多条边,为你的游戏创造静态的游戏世界。链形状同时提供了创建链和环的方法,
// 以便为大家提供想要的形状。链形状不能自身交叉,那样它有可能不能正常的工作。在Box2d中,链形状是通过b2ChainShape实现的。

///cocos2d-x-3.0alpha0/external/Box2D/Collision/Shapes
//  链形状,链形状是一个自由形式的序列的线段,链具有双面碰撞,故你可以使用内部或者外部碰撞。
// 链形状提供了一种高效的方法来同时连接多条边,为你的游戏创造静态的游戏世界。链形状同时提供了创建链和环的方法,
// 以便为大家提供想要的形状。链形状不能自身交叉,那样它有可能不能正常的工作。在Box2d中,链形状是通过b2ChainShape实现的。


#ifndef B2_CHAIN_SHAPE_H
#define B2_CHAIN_SHAPE_H

#include <Box2D/Collision/Shapes/b2Shape.h>
//声明
class b2EdgeShape;

// 链形状是一个自由形式的序列的线段,链具有双面碰撞,故你可以使用内部和外部碰撞
// 同时,你可以使用任何缠绕的顺序。尽管可能有很多顶点,不过它们都是通过b2Alloc分配的。
// 链接信息是用来创建平滑的碰撞
// 警告:如果他们自身交叉时,有可能不会正确的处理碰撞
//       即有可能正常工作,也有可能不正常工作
class b2ChainShape : public b2Shape
{
public:
    b2ChainShape();     //链形状构造函数
    
    /// 析构函数,用b2Free释放多个点
    ~b2ChainShape();
    
    // 创建一个环。自动调整连接
    // * 参数说明: vertices : 顶点数组,拷贝它们
    //              count    : 顶点的数量
    void CreateLoop(const b2Vec2* vertices, int32 count);
    
    // 用孤立的点创建一个链
    //  * 参数说明: vertices : 顶点数组,拷贝它们
    //               count    : 顶点的数量
    void CreateChain(const b2Vec2* vertices, int32 count);
    
    // 创建由一个顶点连接到上个顶点的链接
    //               不要在环中调用【即不能调用CreateLoop创建了环之后在调用此函数】
    //  * 参数说明: prevVertex : 上一个顶点
    void SetPrevVertex(const b2Vec2& prevVertex);
    
    // 创建由一个顶点连接到下个顶点的链接
    //              不要在环中调用【即不能调用CreateLoop创建了环之后在调用此函数】
    // * 参数说明: vertices : 下一个顶点
    void SetNextVertex(const b2Vec2& nextVertex);
    
    // * 功能描述: 用b2Alloc克隆所有顶点
    //              不要在环中调用【即不能调用CreateLoop创建了环之后在调用此函数】
    // * 参数说明: allocator : soa对象指针
    // * 返 回 值: 形状对象指针
    b2Shape* Clone(b2BlockAllocator* allocator) const;
    // 获取形状的孩子元素的数量
    /// @see b2Shape::GetChildCount
    int32 GetChildCount() const;
    // :根据索引值从链中获取指定的边缘形状
    // * 参数说明: edge :b2EdgeShape对象指针
    //              index:索引值
    /// Get a child edge.
    void GetChildEdge(b2EdgeShape* edge, int32 index) const;
    // 在这个形状中测试这个点的密封性,只适合用于凸的形状
    //     * 参数说明: xf : 形状的变换
    //                  p  : world坐标中的一个点
    //     * 返 回 值: true : 密封
    //                  false:敞开
    //                  总是返回false
    /// This always return false.
    /// @see b2Shape::TestPoint
    bool TestPoint(const b2Transform& transform, const b2Vec2& p) const;
    // * 功能描述:投射一束光到一个链形状中
    //   * 参数说明: output      :输出光线投射的结果
    //                input       :输入光线投射
    //                transform   :变换应用到此形状中
    //                childeIndex :孩子形状索引
    //   * 返 回 值: true : 成功
    //                false:失败
    /// Implement b2Shape.
    bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input,
                 const b2Transform& transform, int32 childIndex) const;
    // * 功能描述:给出一个变换,计算一个孩子形状的轴对齐包围盒(aabb)
    //              不要在环中调用【即不能调用CreateLoop创建了环之后在调用此函数】
    //  * 参数说明: aabb       : 孩子形状的aabb指针
    //               xf         : 一个变换的引用
    //               childIndex : 孩子的索引值
    /// @see b2Shape::ComputeAABB
    void ComputeAABB(b2AABB* aabb, const b2Transform& transform, int32 childIndex) const;
    // :用它的大小和密度计算形状的质量
    //                 Chains的质量为0
    //                 不要在环中调用【即不能调用CreateLoop创建了环之后在调用此函数】
    //     * 参数说明: massData   : 计算形状的质量
    //                  density    : 密度
    /// Chains have zero mass.
    /// @see b2Shape::ComputeMass
    void ComputeMass(b2MassData* massData, float32 density) const;
    // 顶点数组
    /// The vertices. Owned by this class.
    b2Vec2* m_vertices;
    
    ///顶点个数
    int32 m_count;
    
    b2Vec2 m_prevVertex, m_nextVertex;          //前顶点,后顶点
    bool m_hasPrevVertex, m_hasNextVertex;      //是否拥有前顶点,后顶点
};
//构造函数
inline b2ChainShape::b2ChainShape()
{
    m_type = e_chain;
    m_radius = b2_polygonRadius;
    m_vertices = NULL;
    m_count = 0;
    m_hasPrevVertex = false;
    m_hasNextVertex = false;
}

#endif


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐