1. 程式人生 > >quick-cocos2d-x 中自帶物理引擎 PhysicsMaterial 恢復力的問題

quick-cocos2d-x 中自帶物理引擎 PhysicsMaterial 恢復力的問題


今天在使用物理引擎過程中,發現不管材質第二個欄位,恢復力是否設定為0,繫結的物件運動異常,例如一個球落到地面上,落到地面後,並沒有靜止,仍然會跳動(可能很輕微,也可能很劇烈)這種情況很大概率出現,但不是必定會出現。例如:

小球部分:
local body = cc.PhysicsBody:createBox(self:getContentSize(), cc.PhysicsMaterial(0.0, 0.0, 0.0))

地面部分:
local ground = display.newNode()
local bodyBottom = cc.PhysicsBody:createEdgeSegment(cc.p(0, height2), cc.p(width, height2), cc.PhysicsMaterial(0.0, 0.0, 0.0))
ground:setPhysicsBody(bodyBottom)

Cocos 官方給出的答覆是:

反覆測試了一下,有類似於你說的現象,但這不是反彈。而是正常的物理“撞入”然後被拉回,但沒有彈出去,這跟反彈是兩回事。你開啟scene:getPhysicsWorld():setDebugDrawMask(cc.PhysicsWorld.DEBUGDRAW_ALL)仔細觀察就知道。

目前引擎並沒有直接的阻止這一行為的方式,因為這被CHIPMUNK認為是正常的物理模式。

不過,如果非要解決的話,可以通過碰撞檢測的回撥裡進行處理,阻止小球越過某一座標線。物理碰撞的使用方式可參考lua-tests或一些教程。相關事件:

        EVENT_PHYSICS_CONTACT_BEGIN,

        EVENT_PHYSICS_CONTACT_PRESOLVE,

        EVENT_PHYSICS_CONTACT_POSTSOLVE,

        EVENT_PHYSICS_CONTACT_SEPERATE,