iOS Swift SpriteKit DiEndContact工作不正常

iOS Swift SpriteKit DiEndContact工作不正常,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,在我的应用程序(游戏)中,当我的节点在水下时,我需要检测与水的接触并运行动作(使用键),我使用didBeginContact和Update方法来完成。但是当我从水中移动我的节点(通过触摸)时,我会使用didEndContact来检测节点是否出水并停止之前的操作(使用键),这一切都可能很好,但有时didEndContact不会停止操作,也不会检测(使用print(“EndContact”))触点是否结束 检查到节点之间的联系: func didBeginContact(contact: SKPhy

在我的应用程序(游戏)中,当我的节点在水下时,我需要检测与水的接触并运行动作(使用键),我使用
didBeginContact
Update
方法来完成。但是当我从水中移动我的节点(通过触摸)时,我会使用
didEndContact
来检测节点是否出水并停止之前的操作(使用键),这一切都可能很好,但有时
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)
    }

}
Entity
SKSpriteNode
的子类,我在其中声明物理位掩码等。基于
实体
,我获得了
玩家
职业和
敌人
职业。在我的
Player
类中,我得到了当
didBeginContact
didEndContact
触发时运行一些代码的函数

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){
}
此外,我还在
update
方法中的“mainsecene”中更新我的“Player”。它似乎工作正常,但正如我所说的,有时
didEndContact
不会触发

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

    player?.update(dt)
}
我注意到这种“有时”会发生
当我把节点移到水里,再移回来时,移开我的手指,我仍然认为我接触到了水。我很乐意接受任何建议,因为我在编程方面很新)thx

你能列出一些可以复制问题的代码吗?但是“有时不停止操作”如果操作仅在0.2秒内,你怎么知道呢?因为我正在更新我的播放器类(包含collideWith和collideWith func,缩放动作为0,2秒)主场景中的deltatime,该动作会重复,直到玩家接触到水,当我将玩家从水中移动时,动作会被移除,正如我所说,有时候接触结束时动作不会被移除