从碰撞中排除对象

时间:2013-12-18 12:18:34

标签: android lua corona collision

我从上方落下的一块和地板上移动的立方体之间发生碰撞。问题在于每当我做立方体:addEventListener(“collision”,onCollision)时,立方体就会碰到地板,而日冕认为这就是碰撞。块:addEventListener也是如此。由于立方体正在移动,所以该块并不总是撞击立方体,而是撞击地板并且电晕检测到碰撞。

我还有一个循环来生成块。有没有办法在碰撞发生时禁用此循环,因为它会不断产生块。

这是我的代码:

function blockremove()
display.remove( block )
timer.performWithDelay( 1000, blockspawn)
end

function collision(event)
if(event.phase == "began") then
    display.remove( cube )
    display.remove( block )
    gameover = display.newText( "Game Over", display.contentCenterX, display.contentCenterY, native.systemFontBold, 36 )
    gameover:setFillColor( 1,0,0 )
end
 end


 function blockspawn()
 block = display.newRect( 0, 0, 50, 50 )
 block:setFillColor( 1,0,0 )
 block.x = math.random(50, display.contentWidth -50 )
 block.y = -50
 physics.addBody( block, {density=50, friction=0, bounce=0.3} )
 timer.performWithDelay( 3000, blockremove )
 block:addEventListener( "collision", collision )
 end

4 个答案:

答案 0 :(得分:1)

其中一个解决方案是

在onCollision函数中

,您可以识别与&冲突的对象块。相应地执行操作。

您可以使用

识别对象

event.object1.myName event.object2.myName

if event.object2.myName ~= "floor" then

   -- do what you want here
else
    --do nothing

end

注意:您将首先命名该对象 例如

floor.myName = “地板”

http://developer.coronalabs.com/content/game-edition-collision-detection 请在这里回复或投票给我。

答案 1 :(得分:1)

当一个对象与其他对象发生碰撞时,你会看到它正在调用碰撞函数,但它会多次调用它,所以当它第一次被调用时它会删除该对象,但下次它会尝试清理一个已经干净的对象

始终安全地移除对象。

如果object~ = nil则

--remove

结束

答案 2 :(得分:1)

Corona SDK支持碰撞过滤器的概念,您可以在其中定义哪些对象与哪些对象进行交互。

请参阅:http://docs.coronalabs.com/guide/physics/collisionDetection/index.html#filtering

答案 3 :(得分:0)

   if event.object2.myName ~= "floor" then
       if cube ~= nil and block ~= nil then 
            display.remove( cube ) 
            cube =nil end
       end
    end

首先设置一个物体碰撞的条件应该不是地板,如果它满足条件,那么它也应该通过另一个不应该已经移除的测试。