cocos2dx-Box2D入门(六)
|
首先贴一段文字说明,从网上看来的 地址http://blog.comingx.com/?p=1579
Box2D是一个比较优秀的二维物理引擎,由C++编写,后由Alchemy转换成AS3。这个教程主要介绍如何创建物理世界、刚体、及其基本形状,即Box2D的Hello world。 解释一下b2World,b2Body,b2BodyDef,b2Fixture,b2FixtureDef,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);
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
