執行個體介紹Cocos2d-x物理引擎:使用關節,cocos2d-x引擎

來源:互聯網
上載者:User

執行個體介紹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過啊,求樓主搭救,萬分感謝
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.