碰撞在Corona中多次报告

时间:2015-05-31 23:53:43

标签: corona collision-detection collision

我正在Corona SDK中构建一个游戏,它涉及两种不同类型对象的碰撞。游戏中共有3个物体,一个火箭飞船,一个小行星和一个黄色球体。当小行星撞击火箭飞船时,你会失去一条生命。当黄色球体撞击火箭飞船时,你获得了一个点。出于某种原因,小行星和黄色球体都表示当它们只碰撞一次时它们与火箭飞船发生多次碰撞。我已多次重新评估我的代码,我无法弄清楚问题是什么。请帮助,如果您需要示例代码我可以发布一些。

2 个答案:

答案 0 :(得分:0)

碰撞有多个阶段。你必须测试阶段。碰撞开始和结束。应该有一个event.phase告诉你你的进入的阶段。还有预碰撞事件。

答案 1 :(得分:0)

您必须在以下两个阶段中的任何一个中使用代码,

local crate1 = display.newImage( "crate.png" )
physics.addBody( crate1, { density=3.0, friction=0.5, bounce=0.3 } )
crate1.myName = "first crate"

local crate2 = display.newImage( "crate.png" )
physics.addBody( crate2, { density=3.0, friction=0.5, bounce=0.3 } )
crate2.myName = "second crate"

local function onCollision( event )
   if ( event.phase == "began" ) then
     print( "began: " .. event.object1 .. " & " .. event.object2 )
   elseif ( event.phase == "ended" ) then
     print( "ended: " .. event.object1 .. " & " .. event.object2 )
  end
end

crate1.collision = onLocalCollision
 crate1:addEventListener( "collision", crate1 )

crate2.collision = onLocalCollision
crate2:addEventListener( "collision", crate2 )

这将帮助您避免多次碰撞。

https://docs.coronalabs.com/daily/guide/physics/collisionDetection/index.html