简介
当你的需求很简单时,就不要使用物理引擎。比如只需要确定两个对象是否有碰撞,结合使用节点对象的 函数和 Rect 对象的 containsPoint()
,intersectsRect()
方法可能就足够了。例如:
这个时候就需要物理引擎了,在模拟物理情景上,物理引擎的扩展性好,性能的消耗也低。像刚才提到的那个情景,使用物理引擎就能很好的解决。初次了解物理引擎的话,肯定会觉得很陌生,我们来看一个简单的例子,通过例子来介绍术语,或许会容易接受一些。
// create a static PhysicsBody
auto physicsBody = PhysicsBody::createBox(Size(65.0f , 81.0f ), PhysicsMaterial(0.1f, 1.0f, 0.0f));
physicsBody->setDynamic(false);
sprite->setPosition(Vec2(400, 400));
// sprite will use physicsBody
sprite->addComponent(physicsBody);
contactListener->onContactBegin = CC_CALLBACK_1(onContactBegin, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);
代码流程:
PhysicsBody
对象创建Sprite
对象创建PhysicsBody
对象以组件的形式被添加到 对象- 创建监听器以响应
onContactBegin()
事件保持耐心,一旦我们一步一步的去分析,慢慢的就能理解这个过程。