cocos2d-x 物理引擎

cocos2d-x 物理引擎,第1张

概述当你的需求很简单时,就不要使用物理引擎,比如只需要确定两个对象是否碰撞,结合使用节点对象的update函数和Rect对象的containsPoint(),intersectRect()方法可能就足够了。 void update(float dt){ auto p = touch->getLocation(); auto rect = this->getBoundingBox();

当你的需求很简单时,就不要使用物理引擎,比如只需要确定两个对象是否碰撞,结合使用节点对象的update函数和Rect对象的containsPoint(),intersectRect()方法可能就足够了。

voID update(float dt){  auto p = touch->getLocation();  auto rect = this->getBoundingBox();  if(rect.containsPoint(p))  {      // do something,intersection  }}
// create a static PhysicsBodyauto physicsBody = PhysicsBody::createBox(Size(65.0f,81.0f ),PhysicsMaterial(0.1f,1.0f,0.0f));physicsBody->setDynamic(false);// create a spriteauto sprite = Sprite::create("whiteSprite.png");sprite->setposition(Vec2(400,400));// sprite will use physicsBodysprite->addComponent(physicsBody);//add contact event Listenerauto contactListener = EventListenerPhysicsContact::create();contactListener->onContactBegin = CC_CALLBACK_1(onContactBegin,this);_eventdispatcher->addEventListenerWithSceneGraPHPriority(contactListener,this);

上面的例子代码流程:

(1)PhysicsBody对象创建

(2)Sprite对象创建

(3)PhysicsBody对象以组件的形式被添加到Sprite对象

(4)创建监听器以响应onContactBegin()事件

刚体(BodIEs)

刚体描述了抽象物体的物理属性,包括:质量、位置、旋转角度、速度和阻尼。Cocos2d-x用PhysicsBody对象表示刚体。当刚体和形状关联后,刚体对角才具有几何形状,未关联形体,刚体只是一个抽象物体的物理属性集。

材质(Material)

材质描述了抽象物体的材料属性:

(1)density:密度,用于计算物体的质量

(2)friction:摩擦,用于模拟物体间的接触滑动。

(3)restitution:恢复系数,模拟物体反d的一个系数,一般设为0到1之间,0代表不反d,1代表完全反d。

形状(Shape)

形状描述了抽象物体的几何属性,将形状关联到刚体,刚体才具有几何形状。如果需要刚体具有复杂的形状,可以为它关联多个形状,每个形状对象都与一个PhysicsMaterial相关,并且拥有以下属性

(1)type:描述了形状的类别,如圆形、矩形等。

(2)area:用于计算刚体的质量,密度和面积决定了刚体的质量。

(3)mass:刚体的质量,影响物体在给定的力下获得的加速度大小。

(4)moment:刚体获得特定角加速度所需要的扭矩

(5)offset:在刚体的当前坐标中,相对于刚体重心的偏移量

(6)tag:形状对象的一个标签

连接/关节

连接(Contacts)和关节(joint)对象描述了刚体相互关联的方式。

刚体连接了不同的刚体,刚体可以是静态的,每个关节类都是PhysicsJoint的子类,你可以通过设置joint->setCollisionEnable(false)来避免相互关联的刚体互相碰撞。

世界(World)

世界是现实物理世界的一个游戏模拟,容纳着所有被添加进去的抽象物体,你可以将刚体、形状、约束都添加到物理世界中,然后将整个世界作为一个整体进行更新。

PhysicsWorld

物理世界PhysicsWorld与场景(Scene)进行了深入的整合,只需要调用Scene对象的initWithPhysics()方法,就可以创建一个包含物理世界的场景,注意在初始化的时候要进行函数返回值的判断。初始化成功返回true,失败返回false。

(1)gravity:全局重力,默认值为Vec2(0.0f,-98.0f)

(2)speed:物理世界的速度,这里的速度指的是这个模拟世界运行的一种比率,默认值是1.0

(3)updaterate:物理世界的刷新率,这里的刷新率指的是游戏引擎刷新时间与物理世界刷新时间的比值。

(4)substeps:物理世界中每次刷新的子步数量。

物理刚体(PhysicsBody)

具有位置和速度,你可以在物理刚体上应用力(forces)、运动(movement)、阻尼(damPing)、冲量(impulses)等。

碰撞 碰撞筛选

碰撞筛选允许你启用或者阻止形状之间碰撞的发生,引擎支持使用类型,组位掩码来进行碰撞筛选。

Cocos2d-x有32个支持的碰撞类型,对于每个形状都可以指定其所属的类型。还可以指定有哪些类型可以与这个形状进行碰撞,这些都是通过掩码来完成的。

auto sprite1 = addSpriteAtposition(Vec2(s_centre.x - 150,s_centre.y));sprite1->getPhysicsBody()->setcategoryBitmask(0x02);    // 0010sprite1->getPhysicsBody()->setCollisionBitmask(0x01);   // 0001sprite1 = addSpriteAtposition(Vec2(s_centre.x - 150,s_centre.y + 100));sprite1->getPhysicsBody()->setcategoryBitmask(0x02);    // 0010sprite1->getPhysicsBody()->setCollisionBitmask(0x01);   // 0001auto sprite2 = addSpriteAtposition(Vec2(s_centre.x + 150,s_centre.y),1);sprite2->getPhysicsBody()->setcategoryBitmask(0x01);    // 0001sprite2->getPhysicsBody()->setCollisionBitmask(0x02);   // 0010auto sprite3 = addSpriteAtposition(Vec2(s_centre.x + 150,s_centre.y + 100),2);sprite3->getPhysicsBody()->setcategoryBitmask(0x03);    // 0011sprite3->getPhysicsBody()->setCollisionBitmask(0x03);   // 0011}
总结

以上是内存溢出为你收集整理的cocos2d-x 物理引擎全部内容,希望文章能够帮你解决cocos2d-x 物理引擎所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1085635.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存