中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

cocos2d-x物理引擎的實現

發布時間:2020-07-04 03:52:06 來源:網絡 閱讀:874 作者:將才 欄目:游戲開發

 本次的cocos2d-x的版本號為2.1.3,廢話不多說,直接上代碼!!!!!

  1. #ifndef __HELLOWORLD_SCENE_H__ 
  2. #define __HELLOWORLD_SCENE_H__ 
  3.  
  4. #include "cocos2d.h" 
  5.  
  6. #include "Box2D/Box2D.h" 
  7. using namespace cocos2d; 
  8.  
  9. class HelloWorld : public cocos2d::CCLayer 
  10. public
  11.      
  12.     virtual bool init();   
  13.  
  14.     static cocos2d::CCScene* scene(); 
  15.     
  16.     CREATE_FUNC(HelloWorld); 
  17.  
  18.      HelloWorld (); 
  19.       ~HelloWorld (); 
  20.  
  21.       void tick(float time); 
  22.  
  23. private
  24.     //世界 
  25.     b2World *m_world; 
  26.  
  27.     //剛體 
  28.     b2Body *m_body; 
  29.  
  30.     //籃球 
  31.     CCSprite *m_ball; 
  32. }; 
  33.  
  34. #endif  // __HELLOWORLD_SCENE_H__ 

 

  1. #include "HelloWorldScene.h" 
  2.  
  3. using namespace cocos2d; 
  4.  
  5. #define PTM_RATIO 32.0 //像素到米的轉換 
  6.  
  7.  HelloWorld :: HelloWorld () 
  8.  { 
  9.      m_world = NULL; 
  10.      m_body = NULL; 
  11.      m_ball = NULL; 
  12.  
  13.  } 
  14.  
  15.  HelloWorld::~HelloWorld() 
  16.  { 
  17.      delete m_world ; 
  18.      m_body = NULL; 
  19.      m_ball = NULL; 
  20.  } 
  21.  
  22.  
  23. CCScene* HelloWorld::scene() 
  24.     CCScene * scene = NULL; 
  25.     do  
  26.     { 
  27.         
  28.         scene = CCScene::create(); 
  29.         CC_BREAK_IF(! scene); 
  30.  
  31.         HelloWorld *layer = HelloWorld::create(); 
  32.         CC_BREAK_IF(! layer); 
  33.  
  34.         scene->addChild(layer); 
  35.     } while (0); 
  36.  
  37.     return scene; 
  38.  
  39.  
  40. bool HelloWorld::init() 
  41.     bool bRet = false
  42.     do  
  43.     { 
  44.  
  45.         CC_BREAK_IF(! CCLayer::init()); 
  46.          
  47.         CCSize size = CCDirector::sharedDirector()->getWinSize(); 
  48.  
  49.         //籃球 
  50.         m_ball = CCSprite::create("Ball.png"); 
  51.         CC_BREAK_IF(!m_ball); 
  52.         m_ball->setPosition(ccp(100,400)); 
  53.         this->addChild(m_ball); 
  54.  
  55.         //創建一個世界 
  56.         b2Vec2 gravity(0.0f,-10.0f); 
  57.         m_world = new b2World(gravity); 
  58.  
  59.         /**  創建圍繞整個屏幕的邊緣 **/ 
  60.         //剛體定義 
  61.         b2BodyDef groundBodyDef; 
  62.         groundBodyDef.position.Set(0,0); 
  63.  
  64.         //世界根據剛體定義生成剛體 
  65.         b2Body *groundBody = m_world->CreateBody(&groundBodyDef); 
  66.  
  67.         //生成形狀 
  68.         b2EdgeShape groundBox; 
  69.  
  70.      
  71.         //關聯定義 
  72.         b2FixtureDef boxShapeDef; 
  73.         boxShapeDef.shape = &groundBox; 
  74.  
  75.         //設置形狀屬性 ---下邊框 
  76.         groundBox.Set( b2Vec2(0.0f,0.0f),b2Vec2(size.width/PTM_RATIO,0) ); 
  77.         //創建關聯 
  78.         groundBody->CreateFixture(&boxShapeDef); 
  79.  
  80.         //設置形狀屬性 ---左邊框 
  81.         groundBox.Set( b2Vec2(0.0f,0.0f),b2Vec2(0,size.height/PTM_RATIO) ); 
  82.         //創建關聯 
  83.         groundBody->CreateFixture(&boxShapeDef); 
  84.  
  85.         //設置形狀屬性 ---上邊框 
  86.         groundBox.Set( b2Vec2(0.0f,size.height/PTM_RATIO),b2Vec2(0,size.height/PTM_RATIO) ); 
  87.         //創建關聯 
  88.         groundBody->CreateFixture(&boxShapeDef); 
  89.  
  90.         //設置形狀屬性 --右邊框 
  91.         groundBox.Set( b2Vec2(size.width/PTM_RATIO,size.height/PTM_RATIO), 
  92.                              b2Vec2(size.width/PTM_RATIO,0.0f) ); 
  93.         //創建關聯 
  94.         groundBody->CreateFixture(&boxShapeDef); 
  95.  
  96.         //創建籃球剛體與形狀 
  97.         b2BodyDef ballBodyDef; 
  98.         ballBodyDef.type =b2_dynamicBody; 
  99.         ballBodyDef.position.Set(100/PTM_RATIO,400/PTM_RATIO); 
  100.         //關聯籃球精靈 
  101.         ballBodyDef.userData = m_ball; 
  102.         //創建籃球剛體 
  103.         m_body = m_world->CreateBody(&ballBodyDef); 
  104.  
  105.         //生成形狀 
  106.         b2CircleShape circle; 
  107.         circle.m_radius = 26.0/PTM_RATIO; 
  108.  
  109.         //關聯定義 
  110.         b2FixtureDef ballShapeDef; 
  111.         ballShapeDef.shape = &circle; 
  112.  
  113.         //密度 
  114.         ballShapeDef.density = 1.0f; 
  115.         //摩擦力 
  116.         ballShapeDef.friction = 1.0f; 
  117.         //反彈系數 
  118.         ballShapeDef.restitution = 0.8f; 
  119.         m_body->CreateFixture(&ballShapeDef); 
  120.  
  121.         this->schedule(schedule_selector(HelloWorld::tick),0.1f); 
  122.  
  123.         bRet = true
  124.     } while (0); 
  125.  
  126.     return bRet; 
  127.  
  128. void HelloWorld::tick(float time) 
  129.     //世界步 
  130.     m_world->Step(time,10,10); 
  131.  
  132.     //獲取世界的里的剛體 
  133.     for ( b2Body *body = m_world->GetBodyList();body!=NULL;body=body->GetNext() ) 
  134.     { 
  135.         //獲取籃球精靈 
  136.         if (body->GetUserData()) 
  137.         { 
  138.             //根據剛體的位置設置籃球精靈的位置 
  139.             CCSprite *ballSprite = (CCSprite*)body->GetUserData(); 
  140.             ballSprite->setPosition( ccp(body->GetPosition().x*PTM_RATIO, 
  141.                                      body->GetPosition().y*PTM_RATIO) ); 
  142.  
  143.             ballSprite->setRotation( -1*CC_RADIANS_TO_DEGREES(body->GetAngle()) ); 
  144.         } 
  145.     } 

運行結果:

 

cocos2d-x物理引擎的實現

代碼已經寫得很清晰了,我們總結下,首先創建一個世界,世界通過剛體定義生成剛體,關聯把形狀連接起來,剛體通過關聯定義生成關聯!!下面附上籃球一個!!

由于本人是業余,代碼難免有所披露,望大家斧正!!謝謝,本人QQ947491240恭候大家拍磚!!再次感謝!!

附件:http://down.51cto.com/data/2362584
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

张掖市| 喀喇| 南陵县| 屏山县| 莱阳市| 铁岭县| 泽库县| 平南县| 阳高县| 靖西县| 集贤县| 淅川县| 合水县| 呼伦贝尔市| 海丰县| 兴城市| 沅陵县| 吉木萨尔县| 南城县| 威信县| 凤翔县| 西充县| 崇信县| 白玉县| 绵阳市| 花垣县| 精河县| 禄劝| 湟中县| 观塘区| 蒙山县| 长宁县| 松阳县| 九龙城区| 石河子市| 西吉县| 会理县| 铜山县| 那曲县| 杭州市| 彭山县|