在Lua中不用物理引擎的检测碰撞会很卡,Lua的for循环的效率比C++的低几十倍
那样的话,怎么处理呢?我在想能不能把碰撞检测的过程扔到C++中处理呢
后来发现cocos2dx中有一个物理世界,可以进行碰撞检测,于是把碰撞检测的处理扔到那去处理,发现在玩时就没有那么卡了
首先先绑定一个碰撞检测的事件,然后创建每个鱼的PhysicsBody,还有就是设置物理掩码,都设置为无碰撞效果,只需要检测是否碰撞到了
local box = cc.PhysicsBody:createCircle(self._sp:getContentSize().width/3)
box:setDynamic(true)
box:setCategoryBitmask(1)
box:setContactTestBitmask(1)
box:setCollisionBitmask(2)
self._sp:setPhysicsBody(box)
因为我们只是需要检测子弹与鱼是否碰撞到,不需要显示碰撞效果,所以掩码都一样
添加的碰撞检测事件
local conListener=cc.EventListenerPhysicsContact:create()
conListener:registerScriptHandler(function(contact)
local node1=contact:getShapeA():getBody():getNode()
local node2=contact:getShapeB():getBody():getNode()
if not node1 or not node2 then return end
if node1:getName() ~= node2:getName() then
local fish = nil