chipmunk是一個用C寫成的物理引擎,quick-cocos2d-x已經用C++對其進行封裝,導出到lua的類有: node
CCPhysicsWorld CCPhysicsBody CCPhysicsShape CCPhysicsDebugNode CCPhysicsCollisionEvent CCPhysicsVector
能夠看出,quick-cocos2d-x沒有對joint(鏈接)進行封裝,下面將就如何在quick-cocos2d-x中使用chipmunk做詳細的介紹。
1、簡介
一、World,Body,Shape可用下圖說明其關係
能夠看出,World由Body組成,而Body又由Shape組成。就像咱們所處的世界同樣,世界由房屋,樹木等等構成,而房屋由門窗,牆壁等組成,樹木由葉子,樹幹,樹枝等組成。
二、CCPhysicsDebugNode是用於顯示各個物體的邊框等等信息,主要用於調試。
三、CCPhysicsCollisionEvent是物體之間發生碰撞時產生的事件,事件中攜帶有碰撞時的信息。
四、CCPhysicsVector則是向量,物體受力時將會用到。
2、使用流程
一、創建World
咱們要使用chipmunk,首選要創建一個世界(CCPhysicsWorld) app
-- 創建沒有引力的世界 CCPhysicsWorld:create() -- 指定兩個方向上的引力 CCPhysicsWorld:create(gravityX, gravityY)示例:
-- 引力向下的世界(跟地球相似) self.world=CCPhysicsWorld:create(0,-200) self:addChild(self.world)二、創建Body
-- 當mass<=0時會建立一個StaticBody World:createBoxBody(mass, width, height) -- offset爲偏移量 World:createCircleBody(mass, radius, offsetX, offsetY) -- vertexes格式爲{x1, y1, x2, y2, x3, y3},目前的版本有bug,不能夠設置offset World:createPolygonBody(mass, vertexes, offsetX, offsetY)示例:
local body = self.world:createBoxBody(10, 100, 100) local body = self.world:createCircleBody(0, 20, 50, 50) -- 建立一個三角形 local vertexes = {0,0,50,50,100,0} local body=self.world:createPolygonBody(0, vertexes)2)經過Body裏的方法建立:
CCPhysicsBody:createStaticBody(world) CCPhysicsBody:create(world, mass, moment)示例:
local body = CCPhysicsBody:createStaticBody(self.world) -- 這種建立方式要記得把body放到world裏 self.world:addBody(body)3)重要屬性或方法:
-- 摩擦係數 0-1.0 body:setFriction(friction) -- 反彈係數 0-1.0 body:setElasticity(elasticity) -- 是不是感應 body:setIsSensor(isSensor) body:isSensor() -- 速度 body:setVelocity(velocityX, velocityY) -- 角速度 body:setAngleVelocity(velocity) -- 推力 body:applyForce(forceX, forceY, offsetX, offsetY) body:applyForce(force, offsetX, offsetY) body:applyImpulse(forceX, forceY, offsetX, offsetY) body:applyImpulse(force, offsetX, offsetY)4)刪除
-- unbind=true時將解除綁定的CCNode,但不會從場景裏刪除node,只是執行CC_SAFE_RELEASE_NULL(node); -- unbind=false時CCNode將繼續綁定在該Body上,默認爲true body:removeSelf(unbind) World:removeBody(body, unbind) World:removeBodyByTag(tag, unbind)三、創建Shape
-- 線段,lowerLeft和lowerRight爲CCPoint,thickness爲粗細 Body:addSegmentShape(lowerLeft, lowerRight, thickness) Body:addCircleShape(radius, offsetX, offsetY) Body:addBoxShape(width, height) -- 目前好像不能運行,已發issue到官方倉庫 Body:addPolygonShape(vertexes, offsetX, offsetY)
2)Shape的屬性 ui
-- 摩擦係數 0-1.0 shape:setFriction(friction) -- 反彈係數 0-1.0 shape:setElasticity(elasticity) -- 是不是感應 shape:setIsSensor(isSensor) shape:isSensor()3)刪除
body:removeShape(shapeObject) body:removeShapeAtIndex(index) body:removeAllShape()四、綁定
-- node爲CCNode類型 Body:bind(node) Body:unbind()來完成綁定和解綁。
self.worldDebug=self.world:createDebugNode() self:addChild(self.worldDebug)
以上就是quick-cocos2d-x中使用chipmunk的過程,有些成員方法沒有一一指出,你們可自行翻看源碼來了解。下一篇我將會講到碰撞部分。 lua