• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Cocos2d-x3.0Lua编程之响应物理引擎的Contact事件回调不运行的问题 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在较早的版本号如3.0beta使用例如以下代码的话:

    -- add ground
    local groudNode = cc.Node:create()
    groudNode:setPhysicsBody(cc.PhysicsBody:createEdgeSegment(cc.p(0, landHeight), cc.p(288, landHeight)))
    layer:addChild(groudNode)

    -- add bird
    local spriteBird = createBird()
    spriteBird:setPhysicsBody(cc.PhysicsBody:createCircle(birdSize))
    layerBg:addChild(spriteBird)
    local function onContactBegin(contact)
        print("onContactBegin")
        return true;
    end

    -- bind contact listenser
    local contactListener = cc.EventListenerPhysicsContactWithBodies:create(groudNode:getPhysicsBody(), spriteBird:getPhysicsBody())
    contactListener:registerScriptHandler(onContactBegin, cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN)
    layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(contactListener, layer)


注冊给事件 cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN 的回调函数是会被调用的,然后到了3.0版本号后,以上的代码便无法正常工作,cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN事件并未被触发,须要额外为以上代码中的2个刚体对象groudNode:getPhysicsBody()和spriteBird:getPhysicsBody()分别调用setContactTestBitmask(mask),当中mask取同一个值从而使得2个刚体对象属于同一个Contact測试组,这样才干保证当2个刚体接触时Contact事件能被触发,进而调用回调函数。

正确的演示样例代码例如以下:

    -- add ground
    local groudNode = cc.Node:create()
    groudNode:setPhysicsBody(cc.PhysicsBody:createEdgeSegment(cc.p(0, landHeight), cc.p(288, landHeight)))
    groudNode:getPhysicsBody():setContactTestBitmask(1);
    layer:addChild(groudNode)

    -- add bird
    local spriteBird = createBird()
    spriteBird:setPhysicsBody(cc.PhysicsBody:createCircle(birdSize))
    spriteBird:getPhysicsBody():setContactTestBitmask(1);
    layerBg:addChild(spriteBird)
    local function onContactBegin(contact)
        print("onContactBegin")
        return true;
    end

    -- bind contact listenser
    local contactListener = cc.EventListenerPhysicsContactWithBodies:create(groudNode:getPhysicsBody(), spriteBird:getPhysicsBody())
    contactListener:registerScriptHandler(onContactBegin, cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN)
    layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(contactListener, layer)



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua-1-c#执行lua文件-调用lua文件中的方法发布时间:2022-07-22
下一篇:
Lua工具类发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap