cpShape结构

来源:互联网 发布:集成电路板编程 编辑:程序博客网 时间:2024/06/16 03:25

cpShape

Chipmunk目前支持3种碰撞图形。
1.圆形(速度最快而且最简单)

2.线段(多用做静态图形,但不能线段之间实现碰撞)

3.凸多边形(最慢,但是却最灵活)

接下来看看cpShape这个结构

typedef unsigned int cpCollisionType;
typedef unsigned int cpLayers;
typedef unsigned int cpGroup;

typedef struct cpShape
{
        
        const cpShapeClass *klass;
        
        //记录着附加的刚体
        cpBody *body;

        //记录着该形状的边界,如果想改变它你需要调用cpShapCacheBB或者cpSpaceStep函数
        cpBB bb;
        
        //这个形状是否是一个sensor, sensor只会调用碰撞函数, 而不会真正的去碰撞
        int sensor;
        
        //弹性系数0.0-1.0
        cpFloat e;
        //摩擦系数
        cpFloat u;
        //该形状的速度
        cpVect surface_v;
        
        //自定义字段,一般直接解释为对应的精灵
        void *data;
        
        //碰撞类型
        cpCollisionType collision_type;
        //多个形状在同一个非零集合时不会发生碰撞默认为0
        cpCollisionGroup group;
        //碰撞掩码
        cpLayers layers;
} cpShape;


圆形:
cpCircleShape *cpCircleShapeAlloc(void)
cpCircleShape *cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpVect offset, cpFloat radius)
cpShape *cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset)

body 形状附加的刚体 
radius 半径
offset 当前坐标和重心的一个偏移

cpVect cpCircleShapeGetOffset(cpShape *circleShape)
cpFloat cpCircleShapeGetRadius(cpShape *circleShape)
得到圆形的一些属性值,如果非圆调用会抛出一个提示

线段:
cpSegmentShape* cpSegmentShapeAlloc(void)
cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius)
cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius)
body 形状附加的刚体
a , b 线段端点
radius 线段的厚度

cpVect cpSegmentShapeGetA(cpShape *shape)
cpVect cpSegmentShapeGetB(cpShape *shape)
cpVect cpSegmentShapeGetNormal(cpShape *shape)
cpFloat cpSegmentShapeGetRadius(cpShape *shape)
得到线段的一些属性值,如果非线段调用会抛出一个提示


凸多边形

cpPolyShape *cpPolyShapeAlloc(void)
cpPolyShape *cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int numVerts, cpVect *verts, cpVect offset)
cpShape *cpPolyShapeNew(cpBody *body, int numVerts, cpVect *verts, cpVect offset)

body 形状附加的刚体
verts 顺时针旋转的凸多边形定点序列
offset 当前坐标和重心的一个偏移
如果不是凸多边形会抛出一个提示.

int cpPolyShapeGetNumVerts(cpShape *shape)
cpVect cpPolyShapeGetVert(cpShape *shape, int index)
得到凸多边形的一些属性值,如果非线段调用会抛出一个提示

0 0
原创粉丝点击