cocos2dx-Box2D入门(六)

cocos2dx-Box2D入门(六),第1张

概述首先贴一段文字说明,从网上看来的   地址http://blog.comingx.com/?p=1579 Box2D是一个比较优秀的二维物理引擎,由C++编写,后由Alchemy转换成AS3。这个教程主要介绍如何创建物理世界、刚体、及其基本形状,即Box2D的Hello world。 Box2D的物理世界通常包括这样几个对象: world:一个物理世界,所有的刚体都将存在在这个世界里面,这个世界以

首先贴一段文字说明,从网上看来的 地址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入门(六)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1037400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存