Cocos CreatorCocos2d-X与游戏开发cocos2d-Lua

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))

好嘞,至此就可以看到一个小精灵一上一下的抽插了!

上一篇下一篇

猜你喜欢

热点阅读