本篇文章繼續介紹cocos2D-x?2.1的新特性:CCPhysicsSprite?和CCPhysicsDebugNode,從名稱上就可以看出來這兩個類是和物理引擎相關的類,和之前介紹的CCDrawNode一樣,CCPhysicsSprite?沒有提供新功能,而是對之前功能的一個封裝。
CCPhysicsSprite?定義一個物理類綁定的精靈,它繼承自CCSprite精靈類,它的使用來看一下TestCpp項目,CCPhysicsSprite?支持目前cocos2D-x中的box2D和chipmunk兩個物理引擎,但是你只能使用定義預編譯的宏變量CC_ENABLE_CHIPMUNK_INTEGRATION?或CC_ENABLE_CHIPMUNK_INTEGRATION中的一個來使用**box2D或chipmunk****其中的一個**,你可以通過兩種方式來設置CC_ENABLE_CHIPMUNK_INTEGRATION?或CC_ENABLE_CHIPMUNK_INTEGRATION的值,一種是在xcode的building?setting中設置,如圖所示

另一種是在Config.h文件中設置,如圖所示

對于TestCpp這個項目,這里需要說一句就是把引擎變成box2D后編譯項目會報錯,是因為沒有對ChipmunkTest項目加入預編譯的判斷,對于該部分,我做了修改,下載地址:http://download.csdn.net/detail/bill_man/5012842
回到正題,介紹CCPhysicsSprite?和CCPhysicsDebugNode的使用,CCPhysicsSprite?只需要按照CCSprite的方法定義,然后將之前按照Chipmunk方式定義的body設置給精靈就可以了,代碼如下:
~~~
CCPhysicsSprite?*sprite?=?CCPhysicsSprite::createWithTexture(m_pSpriteTexture,?CCRectMake(posx,?posy,?85,?121));
parent->addChild(sprite);
sprite->setBody(body);
sprite->setPosition(pos);
~~~
可以打開2.1?之前的版本的相同位置的文件(名稱可能不同),可以看到當時我們要自己定義一個精靈類并且完成坐標的對應,有了CCPhysicsSprite之后就會更方便的使用。
CCPhysicsDebugNode是為了更方便debug的類,將它設置為顯示之后,在場景內定義的精靈的碰撞形狀塊就顯示出來了,如圖所示

在這個例子中,點擊Toggle?debug就可以切換CCPhysicsDebugNode的顯示和隱藏,定義CCPhysicsDebugNode的代碼如下:
~~~
m_pDebugLayer?=?CCPhysicsDebugNode::create(m_pSpace);
this->addChild(m_pDebugLayer,?Z_PHYSICS_DEBUG);
~~~
傳入的參數是cpSpaceNew類實例,默認創建的一個CCPhysicsDebugNode是顯示的,可以通過setVisible函數來控制它的顯示與隱藏,需要說明的是CCPhysicsDebugNode目前只支持Chipmunk。
CCPhysicsSprite在Box2D中的使用和Chipmunk類似(在TestCpp中的Box2DTest中),只是多了一個函數需要設置,就是PTMRatio,即“cocos2D-x中的像素到box2D中的meters單位的轉換比率”
~~~
CCPhysicsSprite?*sprite?=?CCPhysicsSprite::createWithTexture(m_pSpriteTexture,CCRectMake(32?*?idx,32?*?idy,32,32));
parent->addChild(sprite);
sprite->setBody(body);
sprite->setPTMRatio(PTM_RATIO);
sprite->setPosition(?ccp(?p.x,?p.y)?);
~~~
在Box2DTest中還保留著之前為了使用box2D而定義的精靈類的代碼,可以對比一下現在的使用,確實是方便很多了
對于CCPhysicsSprite的使用,有一些限制:
1)Scale?和Skew屬性是忽略的,也就是說setScale或者setSkew后碰撞的形狀塊大小等不會改變。
2)Position?和rotation屬性是有效的,如果你手動設置Position?和rotation,負責控制碰撞的形狀塊的位置和旋轉角度會改變。
3)一個項目中同時只能支持Chipmunk和Box2D中的一個
如有錯誤,請多多指教,歡迎大牛拍磚
- 前言
- (1)--HelloWorld
- (2)--重要概念及Test例子結構
- (3)--動作(CCAction)
- (4)--觸屏事件
- (5)--動作管理
- (6)--場景間切換效果
- (7)--CCProgressTimer
- (8)--場景特效
- (9)--粒子系統
- (10)--運動中的加速度效果
- (11)--拖動間隱效果
- (12)--圖形繪制
- (13)--內存回收機制
- (14)--菜單項
- (15)--CCOrbitCamera
- (16)--LayerColor
- (17)--瓦片地圖集
- (18)--Lable
- (19)--物理引擎box2d(1)
- (20)--物理引擎box2d(2)
- (21)--精靈類
- (22)--動畫類
- (23)--其他(屏幕旋轉,schedule,系統語言)
- (24)--音樂音效
- (25)--CCRenderTexture
- (26)--其他(游戲存檔,切換高清,圖片處理)
- (27)--CCMutableArray
- (28)--CCTMXTiledMap
- (29)-cocosBuilder
- (30)2.1新特性之CCClippingNode
- (31)2.1新特性CCPhysicsSprite
- (32)-cocos2d-x & javascript跨平臺初體驗