加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-x学习笔记_Box2d物理引擎1

发布时间:2020-12-14 19:45:38 所属栏目:百科 来源:网络整理
导读:如果只是对坐标的移动、持续改变位置,我们完全可以通过计划任务或者递归来解决, 如果涉及对物理世界中移动、碰撞等属性较为逼真的模拟,我们需要借助物理引擎的帮助。 世界、刚体、夹具、监听 ----------------------------------------------------------

如果只是对坐标的移动、持续改变位置,我们完全可以通过计划任务或者递归来解决,

如果涉及对物理世界中移动、碰撞等属性较为逼真的模拟,我们需要借助物理引擎的帮助。

世界、刚体、夹具、监听

----------------------------------------------------------------------

#include ''box2d/box2d.h''

设置世界的属性

b2Vec2 gravite;

gravite.Set(0.0f,-9.8f);//标准物理世界重力


创建物理世界

b2World *world=new b2World(gravite);


设置刚体夹具

b2PolygonShape bodyshape;

bodyshape.SetAsBos(50/32,50/32);


设置初始状态

b2BodyDef bodydef;

bodydef.type=b2_staticBody;

bodydef.position.Set(0.0f,10/32.0f);


设置刚体属性

b2FixtureDef fixdef;

fixdef.shape=&shape;

fixdef.density=1.0;//密度

fixdef.friction=0.3;//摩擦力

fixdef.restitution=0.5;//恢复系数


创建刚体

b2Body *body=world->CreateBody(&bodydef);

body->CreateFixture(&fixdef);


//物理引擎只是对数据的模拟,还需要通过精灵将模拟的结果实时的显示到屏幕上。

Sprite *sp=Sprite::create("xxx.png");

body->SetUserData(sp);


//既然物理引擎是一个持续的模拟的行为,那么需要计划任务执行物理引擎的模拟

//在init()方法中加入,该计划任务默认调用Updata方法。

this->scheduleUpdate();


void HelloWorld::Update(float t)

{

world->Step(t,8,3);

for(b2Body *b=world->GetBodyList();b!=NULL;b=b->next)

{

auto sp=(Sprite*)b->GetUserData();

if(sp!=NULL)

{

sp->setPosition(b->GetPosition().x*32,b->GetPosition().y*32,);

sp->setRotation(-CC_RADIANS_TO_DEGREES(b->GetAngle()));

}

}

}


------------------------------------------------------------------------------------------------------------

在新版Cocos3.x中,将物理世界封装到了Scene中,可以通过Cocos进行统一的管理

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读