box2d 粗略的模拟水浮力

准备工作,首先修改 box2d 的 b2Body 类,

增加一个public 修饰的 bool 类型标识变量 m_isInWater,用于标识物体当前是否在水中。

然后,切到 box2d 的 b2World 类,在 CreateBody 方法的尾部添加一行初始化标识变量的代码:

contactListener 的相关代码:

主场景的tick方法:

值得一提的是:

我开始是将表示变量放在 CCSprite 类里面的,这样会出现一个问题:

contactListener 当物体脱离水区域调用 removeBuoyancyTag() 方法的时候

如果在水中将该 body 切割的话(切割会将旧 body 销毁,并生成两份新的 body),从 body 里面取出 CCSprite 对象会报出错误,

后来在我将 isInWater 这个标识放到 b2Body 里面后,干掉了这个bug(没做细致的测试,不过试了蛮多次,没发现出问题)~

你可能感兴趣的:(box2D)