執行個體介紹Cocos2d-x物理引擎:使用關節,cocos2d-x引擎
在遊戲中我們可以通過關節約束兩個物體的運動。我們通過一個距離關節執行個體,介紹一下如何在使用關節。
這個執行個體的運行後的情境,當情境啟動後,玩家可以觸摸點擊螢幕,每次觸摸時候,就會在觸摸點和附近產生兩個新的精靈,它們的運行是自由落體運動,它們之間的距離是固定的。圖示是開啟了繪製調試遮罩,可見,調試遮罩不僅會顯示物體,還會顯示關節。
使用距離關節執行個體
使用距離關節執行個體(繪製調試遮罩)
代碼部分中HelloWorldScene.h檔案與上一節的執行個體非常類似,不再介紹了。HelloWorldScene.cpp中建立物理世界和指定世界的邊界語句是在HelloWorld::createScene()和HelloWorld::init()函數中,這兩個函數類似於上一節執行個體,這裡也不再解釋這些函數代碼了。
HelloWorldScene.cpp中與使用關節的相關代碼如下:
bool HelloWorld::onTouchBegan(Touch* touch, Event* event){Vec2 location = touch->getLocation();addNewSpriteAtPosition(location);return false;} void HelloWorld::addNewSpriteAtPosition(Vec2 p){ Size visibleSize = Director::getInstance()->getVisibleSize();Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto boxA = Sprite::create("BoxA2.png"); ①boxA->setPosition(origin+ p); ② auto boxABody = PhysicsBody::createBox(boxA->getContentSize()); ③boxA->setPhysicsBody(boxABody); ④addChild(boxA, 10, 100); ⑤ auto boxB = Sprite::create("BoxB2.png");boxB->setPosition(origin + p + Vec2(0, -120));auto boxBBody = PhysicsBody::createBox(boxB->getContentSize());boxB->setPhysicsBody(boxBBody);addChild(boxB, 20, 101); auto world = this->getScene()->getPhysicsWorld(); ⑥ PhysicsJointDistance* joint = PhysicsJointDistance::construct(boxABody, boxBBody, Vec2(0, 0), Vec2(0, boxB->getContentSize().width / 2)); ⑦ world->addJoint(joint); ⑧ }
上面代碼onTouchBegan函數是觸摸響應函數,在onTouchBegan中調用addNewSpriteAtPosition函數。在addNewSpriteAtPosition中建立兩個精靈,建立兩個物體,並設定它們之間的關節約束。代碼第①行建立精靈boxA,第②行設定它的位置。第③行代碼PhysicsBody::createBox(boxA->getContentSize())是建立矩形盒子物體。第③行代碼boxA->setPhysicsBody(boxABody) 是設定與精靈相關的物體對象。第⑤行是將精靈添加到當前層中。
建立完成boxA和boxABody,下面又緊接著建立了boxB 和boxBBody對象。建立好它們之後就可以進行添加關節約束了,第⑥行代碼auto world = this->getScene()->getPhysicsWorld()是從情境中獲得物理世界(PhysicsWorld)對象。第⑦行代碼通過PhysicsJointDistance的靜態函數construct建立距離關節對象,其中錨點座標採用的模型座標(本地座標),如果獲得的不是模型座標,可以進行座標轉換。PhysicsBody中提供兩個座標轉換函式:
Vec2 world2Local(const Vec2& point)。全局座標轉換為模型座標。
Vec2 local2World(const Vec2& point)。模型座標轉換為全局座標。
最後第⑧行代碼world->addJoint(joint)語句是將建立關節添加到物理世界中。
更多內容請關注國內第一本Cocos2d-x 3.2版本圖書《Cocos2d-x實戰:C++卷》本書交流討論網站:http://www.cocoagame.net
更多精彩視頻課程請關注智捷課堂Cocos課程:http://v.51work6.com
歡迎加入Cocos2d-x技術討論群:257760386
歡迎關注智捷iOS課堂公用平台
Chipmunk物理引擎一個物體跟隨滑鼠移動的例子,最好在cocos2d-x-js下
沒有研究過這個物理引擎,不過我猜可能是你編寫的時候調用函數有問題吧,根據你說的,目測你是不是調用的點下滑鼠左鍵的功能函數,沒有調用滑鼠左鍵抬起的函數?你如果只調用了滑鼠按下的函數,那勢必會當你點擊對象的時候就會產生物理運算。猜的,我也不確定,畢竟沒有用過。
怎用Xcode工具,在cocos2d-x架構中添加Box2D物理引擎?
樓主遇到“can‘t find file”錯誤嗎?這個錯誤我糾結了很久,Search Path裡面該設定的都設定了,所有.m檔案都改成.mm,就是一直報錯,搜過N個貼都是說這樣設定就可以用,可我就沒有成功build過啊,求樓主搭救,萬分感謝