cocos2D-x初探學習筆記(31)2.1新特性CCPhysicsSprite

weixin_30924079發表於2020-04-04

本篇文章繼續介紹cocos2D-x 2.1的新特性:CCPhysicsSprite 和CCPhysicsDebugNode,從名稱上就可以看出來這兩個類是和物理引擎相關的類,和之前介紹的CCDrawNode一樣,CCPhysicsSprite 沒有提供新功能,而是對之前功能的一個封裝。

CCPhysicsSprite 定義一個物理類繫結的精靈,它繼承自CCSprite精靈類,它的使用來看一下TestCpp專案,CCPhysicsSprite 支援目前cocos2D-x中的box2Dchipmunk兩個物理引擎,但是你只能使用定義預編譯的巨集變數CC_ENABLE_CHIPMUNK_INTEGRATION 或CC_ENABLE_CHIPMUNK_INTEGRATION中的一個來使用box2Dchipmunk其中的一個,你可以通過兩種方式來設定CC_ENABLE_CHIPMUNK_INTEGRATION 或CC_ENABLE_CHIPMUNK_INTEGRATION的值,一種是在xcodebuilding 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的使用,有一些限制:

1Scale 和Skew屬性是忽略的,也就是說setScale或者setSkew後碰撞的形狀塊大小等不會改變。

2Position 和rotation屬性是有效的,如果你手動設定Position 和rotation,負責控制碰撞的形狀塊的位置和旋轉角度會改變。

3)一個專案中同時只能支援ChipmunkBox2D中的一個

如有錯誤,請多多指教,歡迎大牛拍磚



轉載於:https://www.cnblogs.com/manshuoquan/archive/2013/01/20/5347148.html

相關文章