准备工作,首先修改 box2d 的 b2Body 类,
增加一个public 修饰的 bool 类型标识变量 m_isInWater,用于标识物体当前是否在水中。
然后,切到 box2d 的 b2World 类,在 CreateBody 方法的尾部添加一行初始化标识变量的代码:
b2Body* b2World::CreateBody(const b2BodyDef* def){ b2Assert(IsLocked() == false); if (IsLocked()) { return NULL; } void* mem = m_blockAllocator.Allocate(sizeof(b2Body)); b2Body* b = new (mem) b2Body(def, this); // Add to world doubly linked list. b->m_prev = NULL; b->m_next = m_bodyList; if (m_bodyList) { m_bodyList->m_prev = b; } m_bodyList = b; ++m_bodyCount; /** Added By Bruce Yang on 2011.11.25.12.49~ */ b->m_isCuttable = true; // body 默认设置为可被切割的~ b->m_isBalloon = false; // body 默认设置为非气球~ b->m_isInWater = false; // body 默认设置不在水中(即使出生就在水中也不要紧,contactListener会立即做相应设置)~ return b;}
contactListener 的相关代码:
//// MyContactListener.m// GameScene