event.x 似乎无法正常工作。

我有这个场景,当地球与黑洞碰撞时,播放一个爆炸精灵。

enter image description here

于是我写了这个:

local function onCollision( event )
    if ( event.phase == "began" ) then
        if(event.object1.name =="blackholeSprite" or event.object2.name =="blackholeSprite") then
            explosionSprite.x=event.x
            explosionSprite.y=event.y
        explosionSprite:play()
        timer.performWithDelay( 1500, gameOver )
        end
    end

end

问题是爆炸不会在球和黑洞碰撞的地方event.xevent.y发生。从屏幕截图可以看出,爆炸发生在左上角。有什么想法为什么会发生这种情况吗?

点赞
用户2633423
用户2633423

或许是因为在 文档 的“陷阱”中有所报道。

陷阱

x 和 y 位置会受到physics.getAverageCollisionPositions()physics.setReportCollisionsInContentCoordinates()的影响。

事件位置

在“结束”阶段(请参阅 Collision Detection Guide),X 和 Y 位置始终为零。这是 Box2D 的限制。

此外,当碰撞涉及圆形,并且如果碰撞结果在局部空间(参见physics.setReportCollisionsInContentCoordinates())中返回,则碰撞的局部空间位置总是 0,0。这是 Box2D 的限制。

要解决这个问题,你可以尝试从对象本身(之一)获取坐标,而不是从事件中获取。

2013-09-22 08:41:34