博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
box2d之刚体,定制器笔记
阅读量:5923 次
发布时间:2019-06-19

本文共 3012 字,大约阅读时间需要 10 分钟。

刚体(Body):

通过世界创建的对象,物理引擎里面所有东西都是刚体
创建方式:
定义一个b2BodyDef,b2World调用createBody的方法传入此参数

定制器(Fixture):

带有形状,密度,摩擦力等属性
创建方式:
定义一个b2FixtureDef,调用刚体的createFixture方法为刚体创建定制器(相当于附加属性),每个刚体支持添加多个Fixture;
刚体的createFixture重载了两种模式,一种是b2FixtureDef作为参数,一种是shape作为参数,效果是一样的。

形状(shape):

刚体的形状
种类:
circle(圆形),Polygon(多边形),其他等等

基本上他们的范围是这样:world,body,fixture(刚体的多个属性)

tips:b2Vec2是2dx里面类似CGPoint的东西

 

具体看代码

1     //刚体 2     b2BodyDef testBodyDef; 3     testBodyDef.type = b2_staticBody; 4     testBodyDef.position.Set(0,0); 5      6     //底部的边缘线 7     b2EdgeShape testShape; 8     testShape.Set(b2Vec2(0,0), b2Vec2(s.width/PTM_RATIO,0)); 9     10     b2FixtureDef testFixtueDef;11     testFixtueDef.shape = &testShape;12 13     b2Body* testBody = world->CreateBody(&testBodyDef);14     testBody->CreateFixture(&testFixtueDef);15     16     //顶部边缘线17     testShape.Set(b2Vec2(0,s.height/PTM_RATIO), b2Vec2(s.width/PTM_RATIO,s.height/PTM_RATIO));18     testBody->CreateFixture(&testFixtueDef);19     20     //左边边缘线21     testShape.Set(b2Vec2(0,0), b2Vec2(0,s.height/PTM_RATIO));22     testBody->CreateFixture(&testFixtueDef);23     24     //右边边缘线25     testShape.Set(b2Vec2(s.width/PTM_RATIO,0), b2Vec2(s.width/PTM_RATIO,s.height/PTM_RATIO));26     testBody->CreateFixture(&testFixtueDef);27 28     //创建可运动的缸体29     CCPoint ballPosition = CCPointMake(200, 100);30     CCSprite* ballSprite = CCSprite::create("Ball.png");31     ballSprite->setPosition(ballPosition);32     this->addChild(ballSprite);33     34     b2BodyDef moveableBodyDef;35     moveableBodyDef.type = b2_dynamicBody;36     37     //设置刚体位置38     //刚体相对于世界的位置,坐标转换为box2d里面的坐标39     moveableBodyDef.position.Set(ballPosition.x/PTM_RATIO,ballPosition.y/PTM_RATIO);40     //把精灵放到b2BodyDef的userData里面,在update里面刷新精灵位置41     moveableBodyDef.userData = ballSprite;42     43     b2Body *moveableBody = world->CreateBody(&moveableBodyDef);44     45     //创建圆形小球46     b2CircleShape testCircleShape;47     //刚体和形状设置坐标的时候,选一个就ok48     testCircleShape.m_p.Set(0,0);49     float radius = ballSprite->getContentSize().width/(2*PTM_RATIO);50     testCircleShape.m_radius = radius;51     52     b2FixtureDef moveableFixtureDef;53     moveableFixtureDef.shape = &testCircleShape;54     moveableFixtureDef.density = 1.0f;55     moveableFixtureDef.friction = 0.3f;56     moveableBody->CreateFixture(&moveableFixtureDef);

update方法

1 void HelloWorld::update(float dt) 2 { 3     int velocityIterations = 8; 4     int positionIterations = 1; 5      6     world->Step(dt, velocityIterations, positionIterations); 7      8     //刷新精灵位置 9     for (b2Body* body = world->GetBodyList(); NULL!= body; body = body->GetNext())10     {11         if ( NULL != body->GetUserData() )12         {13             CCSprite* sprite = (CCSprite*)body->GetUserData();14             15             sprite->setPosition( CCPointMake( body->GetPosition().x * PTM_RATIO, body->GetPosition().y * PTM_RATIO) );16             sprite->setRotation( -1 * CC_RADIANS_TO_DEGREES(body->GetAngle()) );17         }    18     }19 }

 

转载地址:http://urnvx.baihongyu.com/

你可能感兴趣的文章
Spring源码导入MyEclipse
查看>>
java8新特性整理
查看>>
香港空间的确很坑,网站可用性只有72.37%
查看>>
25GE和50GE协议标准将繁荣市场
查看>>
5G时代渐行渐近 移动承载网络面临新挑战
查看>>
阿里云发布国内首个可视化GPU云服务
查看>>
解析避免黑客Anonymous攻击的七个方法
查看>>
NSA的Windows漏洞军火库泄漏:多个零日、利用工具可直接使用
查看>>
《C语言程序设计进阶教程》一2.5 习题
查看>>
Salesforce为Marketing Cloud带来Lightning UI
查看>>
国信灵通:企业移动化改变生活
查看>>
全球精英相聚第2届东京云计算大会,聚焦企业数字化转型
查看>>
工业4.0的启示 面向中国未来工业的发展
查看>>
从云计算谈IT系统建设的新思路和新方法
查看>>
互联网金融带来新机遇 数据合规性不容忽视
查看>>
物联网领域的集体发力
查看>>
阿里云推APP:远程管理数据中心
查看>>
白山云科技发布云链新产品 专注热存储
查看>>
大众点评支付渠道网关系统的实践之路
查看>>
“新计算 开启新格局” 新华三集团全国巡展完美收官
查看>>