天天看點

在Cocos2D中改變動态物體為靜态物體

<a href="https://www.makeschool.com/tutorials/make-a-dynamic-body-static">原文連結,有壓縮和簡化</a>

1.導入一個新的頭檔案

首先你要知道,不是所有chimpunk特性都通過cocos2d的類暴露出來,比如ccphysicsnode和ccphysicsbody.對于一些更進階的特性你需要使用實際的objective-chipmunk api.

在cocos2d 3.0中你需要導入一個特殊的頭檔案去通路ccphysicalnode和ccphysicsbody中位于chipmunk之中的部分:

2.添加一個後處理(post-step)回調

最簡單的解決辦法是在碰撞處理器中改變bodytype的值從dynamic到static.問題是碰撞處理器在chipmunk計算實體步驟中被調用(chipmunk is calculating a physics step),在計算步驟中會解決碰撞和物體的移動.chipmunk會在計算過程中鎖定chipmunk裡ccphysicsnode的空間(space),因為在計算碰撞期間改變或删除對象會導緻不可預期行為.

是以你隻能在計算完成之後改變ccphysicsnode的bodytype.你需要添加一個後處理回調,示例如下:

無論何時企鵝被激烈碰撞後都會變成靜态物體.真正有趣的代碼如下:

因為之前新的頭檔案被導入,是以我們可以通路實體節點的chipmunkspace,我們正是在那裡添加poststepblock.該block在chipmunk完成步驟計算之後調用,我們在block中改變實體對象為static.

其中的key值是用來確定回調隻調用一次.這在删除對象的操作中非常重要,但在這個例子中也有意義,因為你不想多次改變節點類型.

在Cocos2D中改變動态物體為靜态物體