首先贴一段文字说明,从网上看来的 地址http://blog.comingx.com/?p=1579
Box2D是一个比较优秀的二维物理引擎,由C++编写,后由Alchemy转换成AS3。这个教程主要介绍如何创建物理世界、刚体、及其基本形状,即Box2D的Hello world。
Box2D的物理世界通常包括这样几个对象:
world:一个物理世界,所有的刚体都将存在在这个世界里面,这个世界以米为距离单位。尽量贴近真实世界的度量。
body:刚体,存在在物理世界的理想物体,比任何物体都硬,不会发生形变。body对应着一个bodyDef(刚体定义),刚体定义指定了刚体的类型(动态、静态、轨迹运动的)和刚体的位置,world通过刚体定义创建刚体。
fixture:刚体修饰物,描述刚体的一些特征。fixture对应着fixtureDef(修饰物定义),它将形状绑定到刚体上,使刚体具有一些表现特征,如密度、摩擦系数、d性等等。body通过fixtureDef创建fixture。
shape:一个几何形状,比如圆和多边形。形状是修饰物fixture的一个属性,描述了刚体的碰撞边界。
解释一下b2World,b2Body,b2BodyDef,b2Fixture,b2FixtureDef,shpae之间的关系
1.b2World通过b2BodyDef创建b2Body,没有b2BodyDef,b2Body不知道是什么类型,放在世界什么位置。
2.b2Body通过b2FixtureDef创建b2Fixture,没有b2Fixture,b2Body不知道是什么形状,摩擦、d性、密度都不知道。shpae提供了碰撞检测的外边框。
以下代码分析
1.创建世界
HelloWorldScene.h中添加
//声明一个世界private: b2World *world;HelloWorldScene.cpp init()方法中定义
//创建世界,参数是重力加速度,0表示横向的,-10表示纵向的world = new b2World(b2Vec2(0,-10));
2.创建矩形
//添加矩形voID HelloWorld::addRect(){ //config Box2d //物体相关定义,这个定义是相对于世界来说的,比如说位于世界的什么位置, //是动态的还是静态的等等; b2BodyDef def; //物体位置 def.position=b2Vec2(3,5); //物体类型 三种静态,动态,漂浮物体 def.type=b2_dynamicBody; //创建物体 b2Body*body= world->CreateBody(&def); b2polygonShape shape; shape.SetAsBox(0.1,0.1); //创建fixture之后就能与其他物体产生相互作用了,这个是物体本身的属性, //比如物体的密度,摩擦系数,还有形状等等,shape提供了碰撞检测的外边框 b2FixtureDef fixtureDef; fixtureDef.density=1; fixtureDef.friction=0.3; fixtureDef.shape = &shape; body->CreateFixture(&fixtureDef); //config cocos shape auto s = Sprite::create(); s->setTextureRect(Rect(0,0.1*2*RATIO,0.1*2*RATIO)); addChild(s); //设置shape位置 s->setposition(Point(def.position.x*RATIO,def.position.y*RATIO)); //把body和图形绑定起来 body->SetUserData(s);}
创建静态背景
voID HelloWorld::addGround(){ //创建静态物体 b2BodyDef def; def.type=b2_staticBody; def.position=b2Vec2(400/RATIO,0); b2Body *body= world->CreateBody(&def); //创建图形 b2polygonShape groundShape ; //Box默认情况半宽半高为中心往上左下右都为一半米为单位 groundShape.SetAsBox(400/RATIO,0.5); //创建fixture之后就能与其他物体产生相互作用 b2FixtureDef fixureDef; fixureDef.density=1; fixureDef.friction=0.3; fixureDef.shape=&groundShape; //创建一个fixureDef body->CreateFixture(&fixureDef);}总结
以上是内存溢出为你收集整理的cocos2dx-Box2D入门(六)全部内容,希望文章能够帮你解决cocos2dx-Box2D入门(六)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)