cocos2dx-lua Physics物理引擎入门
2018-05-17 本文已影响7人
文青十三
1、创建物理世界,在cocos2dx-lua中,因为已经进行MVC的分层,在ViewBase.lua中的showWithScene中没有传递需要创建物理世界的参数,所以这里需要简单的修改下;大家可以比对一下这个函数,后面params是我加的,依次调用的地方都要修改,不过也不多
function ViewBase:showWithScene(transition, time, more,params)
print( "ViewBase:showWithScene-------------------------------------------------- 1" )
self:setVisible(true)
local scene = display.newScene(self.name_,params)
scene:addChild(self)
display.runScene(scene, transition, time, more)
if params.physics then
-- 这里加上一个向下的力
local gravity = cc.vertex2F(0,-100)
scene:getPhysicsWorld():setGravity(gravity)
-- 这里是为了测试中绘制全部边框,正式版去掉
scene:getPhysicsWorld():setDebugDrawMask(cc.PhysicsWorld.DEBUGDRAW_ALL)
end
print( "ViewBase:showWithScene-------------------------------------------------- 2" )
return self
end
在main.lua中的main函数也做一点修改
local function main()
local params = {physics = true}
require("app.MyApp"):create():run(nil,params)
end
我们可以看到cocos2dx的scene的创建都放到了display当中,其实创建物理世界只跟创建普通scene略有不同
scene = cc.Scene:createWithPhysics()
2、创建物理世界的碰撞边框
local layer = cc.Layer:create()
layer:setAccelerometerEnabled(true)
layer:setContentSize(display.size)
self:addChild(layer)
-- 创建物理碰撞的矩形边框
-- 第一个参数是边框的尺寸,第二个参数分别是刚体的属性(密度,碰撞系数,摩擦力),第三个参数是边缘像素
local edgeBody = cc.PhysicsBody:createEdgeBox(display.size,cc.PhysicsMaterial(1,1,0),3)
layer:setPhysicsBody(edgeBody)
3、添加精灵
local sprite = cc.Sprite:create("HelloWorld.png")
local spriteBody = cc.PhysicsBody:createBox(sprite:getContentSize(),cc.PhysicsMaterial(1,1,0))
sprite:setPhysicsBody(spriteBody)
layer:addChild(sprite)
sprite:setPosition(cc.p(200 , 300))
好嘞,至此就可以看到一个小精灵一上一下的抽插了!