将一个物体从碰撞中排除。

我遇到了一个问题:一个方块从上面掉落,和地板上的一个移动的立方体发生碰撞。问题是,只要我用cube:addEventListener("collision", onCollision),立方体就会撞到地板,而 Corana 会认为这就是碰撞了。同样也适用于block:addEventListener。由于立方体在移动,所以方块并不总是撞到立方体,而是撞到地板,Corona 检测到了碰撞。我还有一个循环产生方块,有没有办法在碰撞发生时禁用这个循环,因为它会一直产生方块。

以下是我的代码:

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
点赞
用户1218135
用户1218135

以下是解决方案之一:

在 onCollision 函数中,您可以通过识别与 block 发生碰撞的对象并根据需要执行操作来解决问题。

您可以使用以下代码识别该对象:

event.object1.myName event.object2.myName

如果 event.object2.myName ~= "floor" then

   -- 在此处执行您想要的操作
else
   -- 不执行任何操作

注意:您需要先为对象命名。

例如,floor.myName="floor"

http://developer.coronalabs.com/content/game-edition-collision-detection

请回复或支持我。

2013-12-18 13:23:26
用户1218135
用户1218135

当一个物体与另一个物体碰撞时,你会看到它调用了碰撞函数,但它会调用多次,所以第一次调用时它移除了物体,但下一次它又试图清理一个已经被清理的物体。

总是安全地移除物体。

如果对象~ = nil,则

- -删除

结束

2013-12-18 14:24:04
用户1218135
用户1218135
如果事件中 object2 的 myName 不等于 "floor",那么进行下列操作:如果 cube 和 block 都不为 nil,则删除 cube 并令 cube=nil

首先设置一个条件,指定所碰撞的对象不能是 floor,如果满足该条件,则还需要通过另一个测试,即该对象还没有删除。

2013-12-19 06:17:07
用户1870706
用户1870706

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

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

2013-12-23 02:01:00