让Cocos2dx中的TestCPP中的Box2dTest运行起来

一般而言,如果你导入TestCPP到VS2012中去后,会编译十几分钟才会出现窗口界面,这是包含Cocos2dx所有功能的一个demo,功能非常齐全强大,里面有两个关于Box2d的测试案例,一个是Box2dTest,另一个是Box2dTestBed,运行发现,Box2dTest运行不了,提示说“Should define CC_ENABLE_BOX2D_INTEGRATION=1\n to run this test case”。

 

说是要定义CC_ENABLE_BOX2D_INTEGRATION这个宏为1,那要怎样定义呢,可以再程序的最初入口定义,或者打开TestCPP的工程属性,打开[C++]->[预处理器],找到预处理器定义,在里面添加“CC_ENABLE_BOX2D_INTEGRATION=1”即可,此时TestCPP它的CC_ENABLE_BOX2D_INTEGRATION这个宏就是1了。

 

然后我试着再次跑了一下TestCPP工程,发现Box2dTest仍然不能运行,此时的错误不是CC_ENABLE_BOX2D_INTEGRATION没有定义,而是弹出了一个断言对话框,我F5调试进入,才发现,运行到libExtensions这个工程里面的如下代码:

1 void PhysicsSprite::setB2Body(b2Body *pBody)
2 {
3 #if CC_ENABLE_BOX2D_INTEGRATION
4     _pB2Body = pBody;
5 #else
6     CCASSERT(false, "Can't call box2d methods when Box2d is disabled");
7 #endif
8 }

运行跑到了这里:CCASSERT(false, "Can't call box2d methods when Box2d is disabled");才发现,在libExtensions中也有CC_ENABLE_BOX2D_INTEGRATION这个启动Box2d的宏开关。我看了看CCPhysicsSprite.cpp这个文件,在文件的头部,有行注释:

1 #if (CC_ENABLE_CHIPMUNK_INTEGRATION && CC_ENABLE_BOX2D_INTEGRATION)
2 #error "Either Chipmunk or Box2d should be enabled, but not both at the same time"
3 #endif

发现libExtensions库,只能同时支持一个物理引擎,要么是Chipmunk要么就是Box2d,默认是支持Chipmunk的。

 

到此处,才真正找到根源,解决的办法就是给libExtensions工程添加CC_ENABLE_BOX2D_INTEGRATION标记,并且让其=1,并让CC_ENABLE_CHIPMUNK_INTEGRATION=0.

 

//本文作者:cmlanche  文章内容目前的写法仅仅作为一个笔记,自己参考,并不想特意解释让别人明白

//                                                                                                                     2014-04-18

posted @ 2014-04-18 10:06  我是一颗小草  阅读(1992)  评论(0编辑  收藏  举报