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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |