2011-06-30 43 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