简介

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

    这个时候就需要物理引擎了,在模拟物理情景上,物理引擎的扩展性好,性能的消耗也低。像刚才提到的那个情景,使用物理引擎就能很好的解决。初次了解物理引擎的话,肯定会觉得很陌生,我们来看一个简单的例子,通过例子来介绍术语,或许会容易接受一些。

    1. // create a static PhysicsBody
    2. auto physicsBody = PhysicsBody::createBox(Size(65.0f , 81.0f ), PhysicsMaterial(0.1f, 1.0f, 0.0f));
    3. physicsBody->setDynamic(false);
    4. sprite->setPosition(Vec2(400, 400));
    5. // sprite will use physicsBody
    6. sprite->addComponent(physicsBody);
    7. contactListener->onContactBegin = CC_CALLBACK_1(onContactBegin, this);
    8. _eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);

    代码流程:

    • PhysicsBody 对象创建
    • Sprite 对象创建
    • PhysicsBody 对象以组件的形式被添加到 对象
    • 创建监听器以响应 onContactBegin() 事件保持耐心,一旦我们一步一步的去分析,慢慢的就能理解这个过程。