【quick-cocos2d-lua】 构建物理世界

本文介绍了如何在Cocos2d-x 3.x中使用Physics接口构建物理世界,包括创建带有物理特性的游戏角色,设置重力、调试模式,以及详细解释了掩码属性在碰撞检测中的作用,如CategoryBitmask、ContactTestBitmask和CollisionBitmask,最后讲解了物理引擎的碰撞事件监听与处理。
摘要由CSDN通过智能技术生成

Cocos2d-x 3.x(Quick 3.x同样)版本中封装了一个全新的 Physics 接口,物理世界被融入到 Scene 中,即当创建一个场景时,可以指定这个场景是否使用物理引擎。

如:创建一个带物理引擎的游戏场景

display.newPhysicsScene("GameScene")
self.world = self:getPhysicsWorld()

    self.world:setGravity(cc.p(0, -98.0))

    self.world:setDebugDrawMask(cc.PhysicsWorld.DEBUGDRAW_ALL)

self:getPhysicsWorld()用来获取场景绑定的物理世界对象。
获取的 self.world 默认是有带重力的,大小为(0.0f, -98.0f), 但我们也可以通过的setGravity()方法来改变重力大小。
setDebugDrawMask 方法是在调试物理世界时使用的,该方法可以开启调试模,能把物理世界中不可见的body,shape,joint等元素可视化。当调试结束时,需要把该功能关闭。

 

然后创建一个带物理特性的游戏角色。

引擎封装了 Physics 接口后,Node 就自带了 body 属性,也就是每个 Sprite 都自带了 body 属性。所以我们要创建一个可受重力作用的 Sprite 是非常容易的,下面我们在游戏角色中加入如下的一段代码就可以为它绑定一个 body:

local body = cc.PhysicsBody:createBox(self:getContentSize(), cc.PHYSICSBODY_MATERIAL_DEFAULT, cc.p(0,0))

    self:setPhysicsBody(body)

这里调用cc.PhysicsBody:createBox()方法创建了一个矩形的 body,createBox 方法有三个参数,分别是:

  • 参数1为 cc.size 类型,它表示矩形 body 的尺寸大小。
  • 参数2为 cc.PhysicsMaterial 类型,表示物理材质的属性,默认情况下为 cc.PHYSICSBODY_MATERIAL_DEFAULT。 该参数也可自定义,方法如下:
    cc.PhysicsMaterial(density, restitution, friction)
  • density:表示密度
  • restitution:表示反弹力
  • friction:表示摩擦力
  • 例:(密度,反弹力、摩擦力都设为0是为了在碰撞的时候不发生任何物理形变)
  • local MATERIAL_DEFAULT = cc.PhysicsMaterial(0.0, 0.0, 0.0)
  •     local airshipBody = cc.PhysicsBody:createCircle(airshipSize.width / 2,
    
            MATERIAL_DEFAULT)
  • 参数3为 cc.p 类型,它也是一个可选参数,表示 body 与中心点的偏移量&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值