今天在做台球游戏时候发现,母球的刚体在距离边界很近的时候,或者速度很快的时候会发生刚体穿透,穿越边界的现象。
这是cocos封装的chipmunk物理引擎的问题,如果用的是box2d,可以直接设置bullet(true)解决问题,当然3.0之后的开发者
只能如下操作啦:
首先看一下小球和横条的三个bitmask值是否设置正确,如果正确的话有可能是小球速度过快,导致刚体发生穿透现象,可以用以下方法解决:
获取当前的物理世界,将物理世界的autoStep属性设置为false,然后添加一个定时器,设置物理世界的step为一个比较低的帧率。通常update中设置为每帧三次,如果还是会穿透的话就增加次数
之前使用的unity里也有这种现象,但是官当提供了FixedUpdate方法,cocos中其实官方demo也提供了这个解决方案
之后我在PhysicsTest.lua中有这样一段代码:
local function update(delta) for i=1,3 do cc.Director:getInstance():getRunningScene():getPhysicsWorld():step(1/180.0) end end addBall() cc.Director:getInstance():getRunningScene():getPhysicsWorld():setAutoStep(false) layer:scheduleUpdateWithPriorityLua(update, 0)
用在项目有中就好啦!嘻嘻