iOS Swift SpriteKit didEndContact无法正常工作

时间:2016-03-14 15:50:34

标签: ios swift sprite-kit

在我的应用程序(游戏)中我需要检测与水的接触并在我的节点在水下时运行动作(withKey),即时通过didBeginContactUpdate方法执行此操作。但是当我使用didEndContact从水中移动我的节点(带触摸)以检测Node是否在水中并且停止先前的操作(withKey)时它可能都很好但有时didEndContact没有停止动作并且不检测(使用print("EndContact"))联系结束。

节点之间的联系:

func didBeginContact(contact: SKPhysicsContact)
{
    if let node1 = contact.bodyA.node
    {
        let entityNode = node1 as! Entity
        entityNode.collideWith(contact.bodyB, contact: contact)
    }

    if let node2 = contact.bodyB.node
    {
        let entityNode = node2 as! Entity
        entityNode.collideWith(contact.bodyA, contact: contact)
    }
}

func didEndContact(contact: SKPhysicsContact)
{
    if let node1 = contact.bodyA.node
    {
        let entityNode = node1 as! Entity
        entityNode.collideEndedWith(contact.bodyB, contact: contact)
    }

    if let node2 = contact.bodyB.node
    {
        let entityNode = node2 as! Entity
        entityNode.collideEndedWith(contact.bodyA, contact: contact)
    }

}

EntitySKSpriteNode的子类,其中我声明了物理位掩码等等。我根据Player获得了Enemy课程和Entity课程。在我的Player课程中,我获得了在didBeginContactdidEndContact触发

时运行一些代码的函数
override func collideWith(body: SKPhysicsBody, contact: SKPhysicsContact)
{
    if let enemy = body.node as? Enemy
    {
        contactingWater = true
        self.runAction(SKAction.scaleBy(1.1, duration: 0.2), withKey: "action")
    }
}

override func collideEndedWith(body: SKPhysicsBody, contact: SKPhysicsContact)
{
    if let enemy = body.node as? Enemy
    {
        contactingWater = false
        self.removeActionWithKey("action")
    } 
}
override func update(delta: CFTimeInterval){
}

我也更新了我的玩家' on' MainScene'在Update方法中。它似乎工作正常,但正如我所说,有时候didEndContact不会触发

override func update(currentTime: NSTimeInterval)
{
    if lastUpdateTime > 0 
    {
        dt = currentTime - lastUpdateTime
    } else {
        dt = 0
    }
    lastUpdateTime = currentTime

    player?.update(dt)
}

我注意到这个"有时"发生 当我将Node移入水中时,当向后移动时,移开我的手指ith stil认为我与水接触。我很高兴任何消化,因为我非常新的编程)thx

0 个答案:

没有答案