Cocos2d-x学习笔记_Box2d物理引擎1
如果只是对坐标的移动、持续改变位置,我们完全可以通过计划任务或者递归来解决, 如果涉及对物理世界中移动、碰撞等属性较为逼真的模拟,我们需要借助物理引擎的帮助。 世界、刚体、夹具、监听 ---------------------------------------------------------------------- #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进行统一的管理 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |