您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x box2d 简单物体(一)

2014-03-04 17:25 288 查看
个人原创,欢迎转载,注明出处:http://blog.csdn.net/dawn_moon/article/details/20470991

box2d的物理世界有一个world来维护,可以创建简单的物体,圆形,矩形,三角形,多边形。多边形只支持凸多边形,最多8个顶点。

box2d的物体有三种:动态物体(dynamic),静态物体(static),运动学物体(kinematic)。

动态物体可以受力,可以碰撞,可以移动。

静态物体不可以移动,不受力,不能移动,可以参与碰撞。

运动学物体类似静态物体,但是它可以被移动。

创建一个物体有三个步骤,

1.一个物体的body定义b2BodyDef,这个结构体描述了物体的类型,位置坐标,角度,速度等。

2.用b2BodyDef创建一个body。

3.有了body,你还看不到这个物体,还需要定义形状。这个形状又是通过一个叫夹具的东西(fixtures)来加到物体上的。

// body def
b2BodyDef bDef;
bDef.type = b2_dynamicBody;
bDef.position = b2Vec2(visibleSize.width / 2 / RATIO + 5, visibleSize.height / 2 / RATIO);
// body
b2Body * birdBody = world->CreateBody(&bDef);

// shape
b2PolygonShape birdShap;
CCSize size = bird->getContentSize();
birdShap.SetAsBox((65) / 2 / RATIO, (65) / 2 / RATIO, b2Vec2(45 / 2 / RATIO, 27 / 2 / RATIO), 0);
// fixtures
b2FixtureDef birdFixtureDef;
birdFixtureDef.shape = &birdShap;
// fix to body
birdBody->CreateFixture(&birdFixtureDef);


将精灵绑定到物体上:

一个精灵绑定到物体上,是在物体的body定义b2BodyDef里面设置的,

role = CCSprite::create("poop_1.png");
bodyDef.userData = role;


但是如果只这样是不够的,你会发现精灵和物体会分开,不会一起移动。这还需要根据物体的位置改变精灵的坐标,具体可以看上篇代码的update函数。

官方有一个B2Sprite的类,把精灵和body绑在一起了,后面我把这个类在补充一下,用起来就方便一点了,不用去定义一大堆的东西。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息