2011-06-30 44 views

回答

1

是啊......我从来没有得到记录,说...对不起。基本上你创建一个body和形状(既不需要被添加到空间),并使用它来查询非常像其他查询函数。

该代码片段在堆栈上创建了一个主体和形状的副本,然后将其模拟为第一个预测的碰撞点,并绘制路径。

cpBody body = *(originalBody); 
cpPolyShape shape = *((cpPolyShape *)originalShape); 
shape.shape.body = &body; 

cpFloat dt = 1.0f/60.0f; 
cpVect gravity = space->gravity; 

int count = 0; 
for(int i=0; i<300; i++){ 
    cpBodyUpdatePosition(&body, dt); 
    cpBodyUpdateVelocity(&body, gravity, 1.0f, dt); 

    if(cpSpaceShapeQuery(space, (cpShape *)&shape, NULL, NULL)){ 
     quads[count%maxQuads] = quad(body.p, body.rot, CGRectMake(0, 2*32, 64, 64), tsize); 
     count++; 

     break; 
    } 

    if(i%10==0){ 
     quads[count%maxQuads] = quad(body.p, body.rot, rect, tsize); 
     count++; 
    } 
} 
+0

非常感谢你,其实我也从来没有使用过的查询以及:)问题是我需要过滤的形状,以当特定类的形状与被测亩形状碰撞只有突破。此外,我想检索该形状的引用,以便修改其某些属性,这可能与ShapeQuery函数有关吗?什么是另外两个空参数? – Sindico

+0

听起来好像你想使用碰撞处理程序。 http://chipmunk-physics.net/release/ChipmunkLatest-Docs/#Callbacks当某些类型的对象开始或停止碰撞时,您可以注册以接收事件。 这两个NULL参数用于为每个重叠形状和要传递的上下文指针调用的回调函数。 – slembcke

+0

有没有办法预测弹跳呢? – Sindico