首页 > 代码库 > 15--Box2D使用(一、创建物理世界)
15--Box2D使用(一、创建物理世界)
创建工程Box2DTest,去掉背景和精灵对象等。首先在HelloWorldScene.h头文件定义一个屏幕像素与物理世界长度转换宏,并引入box2D头文件
#define PIXEL_TO_METER 30 #include "Box2D/Box2D.h"
再声明几个函数与变量
void createWorld(); //创建物理世界 void createWall(); //创建四周墙体 void createBall(); //创建刚体
b2World* world;
b2Body* wallBody ;
float32 wallLineOffset ;
createWorld实现
void HelloWorld::createWorld(){ b2Vec2 gravity; gravity.Set(0.0f,-9.0f); //物理世界重力向量,这里创建一个向下的重力向量 b2BodyDef* bodydef = new b2BodyDef(); world = new b2World(gravity); //根据重力向量创建物理世界对象 world->SetAllowSleeping(true); //允许休眠 world->SetWarmStarting(true); //初始状态将受到重力影响}
createWall实现
void HelloWorld::createWall(){ CCSize s = CCDirector::sharedDirector()->getVisibleSize(); b2BodyDef wallDef ; //刚体定义 wallDef.position.Set(0,0); //位置 wallBody = world->CreateBody(&wallDef); //创建一个刚体(四周墙体) b2EdgeShape wallShape; //形状 //下 wallLineOffset 方便调整显示位置 wallShape.Set(b2Vec2(0,0+wallLineOffset), b2Vec2(s.width/PIXEL_TO_METER,0+wallLineOffset)); //设置形状大小 wallBody->CreateFixture(&wallShape,0); //将形状连接到框架上 //上 wallShape.Set(b2Vec2(0,s.height/PIXEL_TO_METER-wallLineOffset),b2Vec2(s.width/PIXEL_TO_METER,s.height/PIXEL_TO_METER-wallLineOffset)); wallBody->CreateFixture(&wallShape,0); //左 wallShape.Set(b2Vec2(0+wallLineOffset,s.height/PIXEL_TO_METER),b2Vec2(0+wallLineOffset,0)); wallBody->CreateFixture(&wallShape,0); //右 wallShape.Set(b2Vec2(s.width/PIXEL_TO_METER-wallLineOffset,s.height/PIXEL_TO_METER),b2Vec2(s.width/PIXEL_TO_METER-wallLineOffset,0)); wallBody->CreateFixture(&wallShape,0);}
createBall实现
void HelloWorld::createBall(){ CCSize s = CCDirector::sharedDirector()->getVisibleSize(); for(int i= 0; i < 5; i++) { b2BodyDef ballDef ; ballDef.type = b2_dynamicBody; //设置刚体为动态物体 b2CircleShape circleShape ; //刚体碰撞使用的形状 b2FixtureDef ballFixtureDef ; circleShape.m_p.Set(1.0+i,5.0); circleShape.m_radius= 0.5f; //刚体连接的框架设置 ballFixtureDef.shape = &circleShape; ballFixtureDef.density = 1.0; ballFixtureDef.restitution = 0.8; //设置重力恢复系数 ballFixtureDef.friction = 0.3f; ballDef.position.Set(s.width/2/PIXEL_TO_METER,20/PIXEL_TO_METER); b2Body* ball = world->CreateBody(&ballDef); //根据刚体定义创建刚体 ball->CreateFixture(&ballFixtureDef); //关联框架到刚体上 }}
最后再init方法中添加如下代码
wallLineOffset = 0.5; this->createWorld(); this->createWall(); this->createBall();
最后我们运行看看什么情况
呵呵,我们创建的物体世界没有显示出来,下一篇中我们把物理世界显示出来。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。