初次使用cocos2d 3.0 的box2d引擎詳解
初次使用cocos2d 3.0 的box2d引擎詳解
1.開啟在cocos2d-x-3.0beta2\build的cocos2d-win32.vc2012.sln檔案,在TestCpp專案
右鍵->屬性->C/C++->Preprocessor(預處理程式)->Preprocessor Definitiions(預處理定義)->三角形按鈕->Edit(編輯),出現如圖(2)所示,將
“CC_ENABLE_CHIPMUNK_INTEGRATION=1”替換為
“CC_ENABLE_BOX2D_INTEGRATION=1”,圖(3)的libExtensions專案也執行同上的操作,那麼TestCpp專案執行後的選單裡的Box2dTest就可以執行了!
圖(1)
圖(2)
圖(3)
2.完成上面步驟後,我們用create_project.py建立專案,修改HelloWorldScene.h裡的程式碼,如下:
#include "cocos2d.h"
USING_NS_CC;
class HelloWorld : public cocos2d::Layer
{
public :
Sprite* m_ball;
PhysicsWorld* m_world;
public:
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();
void setPhyWorld(PhysicsWorld* _world){m_world=_world;};
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
// a selector callback
void menuCloseCallback(Object* pSender);
// implement the "static create()" method manually
CREATE_FUNC(HelloWorld);
};
在HelloWorld.cpp裡修改 HelloWorld::createScene()函式:
// 'scene' is an autorelease object
auto scene = Scene::createWithPhysics();
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
// 'layer' is an autorelease object
auto layer = HelloWorld::create();
layer->setPhyWorld(scene->getPhysicsWorld() );
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
然後,在HelloWorldScene.cpp的init方法中加入下面的程式碼:
m_ball=Sprite::create("ball.png",Rect(0,0,48,48));
m_ball->setPosition(ccp(400,600));
auto ballBody=PhysicsBody::createCircle(m_ball->getContentSize().width/2);
m_ball->setPhysicsBody(ballBody);
this->addChild(m_ball);
auto edgeSp=Sprite::create();
auto boundBody=PhysicsBody::createEdgeBox(visibleSize,PHYSICSBODY_MATERIAL_DEFAULT,3);
edgeSp->setPosition(ccp(visibleSize.width/2,visibleSize.height/2) );
edgeSp->setPhysicsBody(boundBody);
this->addChild(edgeSp);
edgeSp->setTag(0);
你就可以看到如下圖所示一個Sprite由於重力作用下往下墜的動畫了,由於設定了DebugDraw,所以會有紅色的框框出現, setDebugDrawMask它可將碰撞體的形狀、關節等等全部繪製出來,方便我們觀察物體及整個場景的可碰撞區域,如不需要時可以去掉:
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
圖(4)
3.如果需要新增libBox2d專案可以
右擊解決方案->add(新增)->Existing Item(存在專案)->上一目錄-> cocos2d ->external -> Box2D -> proj.win32裡找到Box2D.vcxproj,新增這個Box2D專案,之前我是新增了然後編譯的,因為想試一下不新增能不能執行,所以remove(移除)了再清除一下,居然也可執行,所以我的結論是不用新增box2d專案也可以正常使用,至於是否是這樣有待朋友們證實了。
相關文章
- cocos2d 3.0 box2d 解決移動相機鏡頭(滾屏)問題的方法
- 模板引擎使用詳解:包含公共模板
- ORM框架之GreenDao3.0使用詳解(二)ORM框架
- vue3.0API詳解VueAPI
- TDengine 3.0 架構詳解架構
- 初次使用UbuntuUbuntu
- websocket初次使用Web
- Android訊息傳遞之EventBus 3.0使用詳解Android
- CUDA3.0的C++支援詳解C++
- 初次使用Microsoft AzureROS
- gulp使用詳情 及 3.0到4.0的坑
- iOS Swift3.0 UIView動畫詳解iOSSwiftUIView動畫
- Android EventBus 3.0 框架用法詳解Android框架
- 初次使用linux的感想(轉)Linux
- OceanBase 儲存引擎詳解儲存引擎
- 詳解!HTTP1.0/1.1/2.0/3.0的區別HTTP
- 詳解數倉的向量化執行引擎
- 詳解GaussDB(DWS)中的行執行引擎
- Windows上TDengine初次使用Windows
- TDengine 3.0 三大創新詳解
- EventBus 3.0+ 原始碼詳解(史上最詳細圖文講解)原始碼
- Linux MySQL 儲存引擎詳解LinuxMySql儲存引擎
- Cocos2d 3.0繼承自Sprite的類在addChild後出現問題繼承
- 初次使用無狀態sessionbean的問題SessionBean
- 工作流引擎詳解!工作流開源框架ACtiviti的詳細配置以及安裝和使用框架
- [轉帖]OceanBase 儲存引擎詳解儲存引擎
- CMAKE的使用詳解
- Mybatis的使用詳解MyBatis
- Android資料儲存之GreenDao 3.0 詳解Android
- 初次學習 Docker Volume 的基本使用 (四)Docker
- ios cocos2d FPS過低的解決方法iOS
- APScheduler的使用詳解
- JavaFx ObservableList的使用詳解Java
- FTP 命令的使用詳解FTP
- RabbitMQ的詳解和使用MQ
- 利用Docker部署管理LDAP及其初次使用DockerLDA
- MYSQL安裝教程及sqlyog初次使用MySql
- WPS文字中的表格計算功能的初次使用