cpShape结构

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值