我从上方落下的一块和地板上移动的立方体之间发生碰撞。问题在于每当我做立方体: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
答案 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
首先设置一个物体碰撞的条件应该不是地板,如果它满足条件,那么它也应该通过另一个不应该已经移除的测试。