torque 扭矩
Velocity 速度
force 力
Mass 质量
rotational 转动
Segment 线段
radians 弧度
inertia 惯性
创建圆形: cpCircleShapeNew(cpBody * body, cpFloat radius, cpVect offset)
创建线段: cpSegmentShapeNew(cpBody * body, cpVect a, cpVect b, cpFloat radius)
创建多边形: cpPolyShapeNew(cpBody * body, int numVerts, cpVect * verts, cpVect offset) // 顶点记得按逆时针方向排序
旋转轴链接: cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot) 链接两个 body ,两个body 可以围绕 pivot 这个轴旋转
shape->e : 弹力系数
shape->u : 摩擦系数
shape->collision_type : 设置碰撞的类型, 也可当作一个标志位, 来区分不同物体的形状。
body->p, cpVect: Position of the body. 身体当前的位置 --- 身体重心的位置
body->v, cpVect: Velocity of the body. 身体当前的速度
body->m, cpFloat: Mass of the body. 身体的质量
body->w, cpFloat: Current rotational velocity of the body. 身体的当前旋转速度, w 大于 0 时, 逆时针方向转动, 小于 0 时, 顺时针方向转动
body->f, cpVect: Current force being applied to the body. 施加到当前身体上的一个 力。
body->f = cpv(10, -50); 施加到当前身体的外力可以理解如下:一个 x 正方向为 10 的力, 一个Y轴 负方向为 50 的力, 具体的模拟效果应该为 x,y 轴的合力。
body->a, cpFloat: Current rotation angle of the body in radians. 当前身体的旋转角度(以弧度为单位)
body->i – cpFloat: Moment of inertia (MoI or sometimes just moment) of the body. 惯性参数。
body->t – cpFloat: Current torque being applied to the body. 应用到当前身体上的 扭矩
body->v_limit – cpFloat: Maximum speed a body may have after updating it’s velocity. // 身体的最大速度
body->w_limit – cpFloat: Maximum rotational speed a body may have after updating it’s velocity. // 身体的最大旋转速度
body->data,cpDataPointer: 一个数据指针,可以存储自己定制的一些数据。
其他说明信息:
1> joint: 用于连接刚体。有4种类型:
pin joint: 相当于一根棍子(质量忽略)加两个大头针(锚点),两个刚体如果用pin joint连接,他们之间的距离不会改变,他们各自可绕锚点转动(如果有力矩的话)
slide joint: 相当于把pin joint的棍子换成了滑槽。这个滑槽有最大和最小长度。
pivot joint: 即一个旋转轴。两个刚体都绕这个轴旋转
groove joint:相当于可滑动的pivot joint。将刚体2的旋转轴挂到处于刚体1的一段滑槽上。
2> 摆动的绳子, 可以看作一个个的小方块通过 joint 链接在一起的效果。
3> 物体碰撞相关函数
int datea = 100;
// 设置space 空间内碰撞的回调函数, space 空间内,
// 只有 shape->collision_type =1, 和 shape->collision_type =2 发生碰撞的时候, 才会回调collFunc 函数。
// 调用回调函数的时候, 传递了一个 date数据
cpSpaceAddCollisionPairFunc(space, 1, 2, &collFunc, &data);
// 碰撞回调函数
// 如果函数返回 1, 系统会处理当前的碰撞, 并模拟碰撞之后的物理效果
// 如果函数返回 0, 系统会忽略当前的碰撞, a,b 相互运动不会影响
int collFunc(cpShape *a, cpShape *b, cpContact *contacts, int numContacts, cpFloat normal_coef, void *data)
{
int* pData = (int* ) data;
printf(" Data = %d \n"); // 输出 100
printf(" %d \n", a->collision_type ); // 输出 1
printf(" %d \n", b->collision_type ); // 输出 2
if(a->collision_type == 1 )
{
return 0; // 忽略 a,b 直接的碰撞效果, a,b 相互运动不会影响
}
else
{
return 1; // 处理 a, b 直接的碰撞效果
}
}
|