cocos2d_x_02_使用內建物理引擎,cocos2d_x_02引擎

來源:互聯網
上載者:User

cocos2d_x_02_使用內建物理引擎,cocos2d_x_02引擎
最終:
一、建立工程進入cocos2d-x的tools下的bin目錄:/Users/beyond/Desktop/cocos2d-x/cocos2d-x-3.3beta0/tools/cocos2d-console/bin目錄
開啟終端,切換到上述bin目錄
使用cocos命令,建立工程,格式如下:

  • cocos new 工程名 -p 包名 -l 語言 -d 目標檔案夾,
  • 例如 :

cocos new 01_cocos2d-x-p com.beyond-l cpp -d /Users/beyond/Desktop/cocos2d-x/cocos2d-x學習


進入建立好的工程目錄,開啟工程
二、BallScene.h,實質是繼承自Layer
////  BallScene.h//  01_cocos2d-x////  Created by beyond on 14-10-3.////#ifndef ___1_cocos2d_x__BallScene__#define ___1_cocos2d_x__BallScene__#include "cocos2d.h"USING_NS_CC;// 注意 這兒,繼承的是 Layerclass BallScene : public cocos2d::Layer{private:    // 螢幕尺寸    Size winSize;public:    // c++裡面沒有id類型, 所以 返回類的執行個體對象的 指標    static cocos2d::Scene* createScene();    // 以下是 不同點:cocos2d-x的 'init' 方法 返回 bool    // 而cocos2d-iphone 返回 'id' 類型    virtual bool init();    // 宏 自動實現 "靜態 create()方法"    CREATE_FUNC(BallScene);        // 重寫一個方法    virtual void onEnter();    // 自訂方法,建立一個應用程式邊界    void addBoundry();    // 自訂方法,添加一個ball    void addBall(float x,float y);    // 自訂方法,添加一個ball    void addBall(Vec2 point);    };#endif /* defined(___1_cocos2d_x__BallScene__) */


三、BallScene.cpp類實現
////  BallScene.cpp//  01_cocos2d-x////  Created by beyond on 14-10-3.#include "BallScene.h"USING_NS_CC;Scene* BallScene::createScene(){    // 'scene' 自動釋放    // 重點,建立一個,具有物理引擎世界的scene    auto scene = Scene::createWithPhysics();    // 重點,繪製調試資訊    scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);        // 'layer' 自動釋放    auto layer = BallScene::create();    // 將圖層 添加到情境中    scene->addChild(layer);    // 返回 填充好圖層的 情境    return scene;}// 在 "init" 方法中,執行個體化自己要用的精靈對象bool BallScene::init(){    // 1. 調用父類的init , cpp 沒有super,直接寫父類名    if ( !Layer::init() ) return false;    // 螢幕尺寸    winSize = Director::getInstance()->getVisibleSize();        // cocos2d-3.x 可以快速建立 物理body    // setPhysicsBody(<#cocos2d::PhysicsBody *body#>    return true;}#pragma mark - 重寫父類方法void BallScene::onEnter(){    // 1、先執行父類的onEnter    Layer::onEnter();    // 2、調用 自訂方法,建立一個應用程式邊界    addBoundry();    // 3、調用 自訂方法,添加一個ball    addBall(winSize.width/2,winSize.height/2);    // 4、執行個體化一個觸摸監聽器 對象    auto listener = EventListenerTouchOneByOne::create();    // 當觸摸開始時,綁定一個閉包函數;    // 【】表示 要傳入的外界對象,此處是this    // ()表示參數    listener->onTouchBegan = [this](Touch *t,Event *e){        // 點擊就建立一個Ball        // getLocation 返回一個OpenGL座標        this->addBall(t->getLocation());        return false;    };    // 5、擷取事件分發器,添加一個事件監聽器,到this身上;即監聽的是this對象【整個圖層Layer】    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);    }#pragma mark - 自訂方法// 自訂方法,建立一個應用程式邊界void BallScene::addBoundry(){    // 指定size,建立一個物理body    auto b2Body = PhysicsBody::createEdgeBox(winSize,PHYSICSBODY_MATERIAL_DEFAULT,5);    // 建立一個顯示用的精靈    auto boundry = Node::create();    boundry->setPosition(winSize.width/2, winSize.height/2);    // 為精靈 設定物理body    boundry->setPhysicsBody(b2Body);    // 添加精靈到當前 Layer    this->addChild(boundry);}// 自訂方法,添加一個ballvoid BallScene::addBall(float x,float y){    auto ball = Sprite::create("ball.png");    ball->setPosition(x,y);    // 指定size,建立一個物理body    auto b2Body = PhysicsBody::createBox(ball->getContentSize());    // 為精靈 設定物理body    ball->setPhysicsBody(b2Body);    // 添加精靈到當前 Layer    this->addChild(ball);}// 自訂方法,添加一個ballvoid BallScene::addBall(Vec2 point){    addBall(point.x, point.y);}

































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.