1.使用Cocos引擎建立工程,打开cocosstudio修改分辨率为960*640,删掉背景图片
发布到vs工程
1.打开AppDelegate设置分辨率,并运行
director->getOpenGLView()->setDesignResolutionSize(960,640,ResolutionPolicy::EXACT_FIT);
2.配置Bullet(win32)到cocos2dx
首先要将bullet3-master的头文件复制到cocos\frameworks\cocos2d-x\external\Bullet;具体方法请看
如下图Bullet3之交叉编译Android复制头文件
4.将编译好的Bullet库(win32)release库复制到
Cocos\frameworks\cocos2d-x\prebuilt\win32下分别更名为
BulletCollision_vs2012.lib
BulletDynamics_vs2012.lib
BulletSoftBody_vs2012.lib
LinearMath_vs2012.lib
如何得到Bullet库,这个就要去看Bullet3之HelloWorld(vs2012)补充如何生成Bullet库
5.打开刚才生成的项目的属性,选择链接器->输入->附加依赖项,输入生成的Bullet库,如图
将PhysicsWorld3D类复制到classes/physics3d并添加到工程中,编译运行,成功表明配置成功,
有可能会出现errorLNK2038:检测到“RuntimeLibrary”的不匹配项:值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”
将Bullet生成时的c/c++->代码生成->运行库,改为MD
5.测试PhysicsWorld3D
在HelloWorldScene.h添加
在HelloWorld::init()
先初始化摄像机,再初始化物理世界,
关于初始化物理世界,首先创建,然后添加一个地面,再添加一个Box作为测试用
- boolHelloWorld::initPhysics3D()
- {
- _world=PhysicsWorld3D::create();//创建3d物理世界
- if(_world==nullptr)
- {
- returnfalse;
- }
- //载入plane模型
- autospPlane=Sprite3D::create("model/ground.c3b");
- this->addChild(spPlane);
- spPlane->setPosition3D(Vec3::ZERO);
- //addaplane方向向上,位置(0,0),0.5的摩擦,0.5的弹性
- _world->addPlane(btVector3(0,1,btVector3(0,PhysicsMaterial3D(0,0.5,0));
- //载入盒子模型
- _spBox=Sprite3D::create("model/Box.c3b");
- this->addChild(_spBox);
- _spBox->setPosition3D(Vec3(0,20,0));
- //addaBox
- _Box=_world->addBox(btVector3(1,1),0));
- _Box->setUserPointer(_spBox);
- //设置2摄像机可见
- this->setCameraMask(2);
- returntrue;
- }
每一帧去更新物理世界,同时更新Box的位置,当然可以使用MotionState去优化,这个不着急
当HelloWorld退出时要销毁物理世界
- voidHelloWorld::onExit()
- {
- Layer::onExit();
- _world->destroy();//销毁物理世界
- _world=nullptr;
- }
当运行程序,会看到一个Box从天而降,重重的摔在地上