Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 斯威夫特精灵套装中的“永远停止重复动作”_Swift_Sprite Kit - Fatal编程技术网

Swift 斯威夫特精灵套装中的“永远停止重复动作”

Swift 斯威夫特精灵套装中的“永远停止重复动作”,swift,sprite-kit,Swift,Sprite Kit,我创建了一个SKAction,它可以重复Sforver(这是行星旋转)。但我想在着陆器降落到着陆台上后立即停止。到目前为止,我的代码不起作用。我尝试了removeAllActions()和removeActionForKey,如您所见。接触检测工作得很好,还有一堆代码没有显示,包括碰撞委托等 func createPlanet() { var planet = SKSpriteNode() planet.zPosition = 1 planet.name = "mar

我创建了一个SKAction,它可以重复Sforver(这是行星旋转)。但我想在着陆器降落到着陆台上后立即停止。到目前为止,我的代码不起作用。我尝试了removeAllActions()和removeActionForKey,如您所见。接触检测工作得很好,还有一堆代码没有显示,包括碰撞委托等

  func createPlanet() {
    var planet = SKSpriteNode()
    planet.zPosition = 1
    planet.name = "mars"

    redPlanet = SKSpriteNode(imageNamed: "redPlanet")
    redPlanet.name = "red"
    redPlanet.zPosition = 2
    redPlanet.physicsBody = SKPhysicsBody(texture: redPlanet.texture!, size: size)
    redPlanet.physicsBody!.dynamic = false
    redPlanet.physicsBody!.categoryBitMask = planetMask
    redPlanet.physicsBody!.contactTestBitMask = 0
    planet.addChild(redPlanet)

    landingPad = SKSpriteNode(imageNamed: "landingPad")
    landingPad.name = "pad"
    landingPad.zPosition = 3
    landingPad.position = CGPoint(x: 0, y: redPlanet.size.height / 2 - 60)
    landingPad.physicsBody = SKPhysicsBody(rectangleOfSize: landingPad.size)
    landingPad.physicsBody!.dynamic = false
    landingPad.physicsBody!.categoryBitMask = landingPadMask
    landingPad.physicsBody!.collisionBitMask = landerMask
    landingPad.physicsBody!.contactTestBitMask = landerMask
    planet.addChild(landingPad)

    planet.position = CGPoint(x: frame.size.width / 2, y: -redPlanet.size.height / 6)

    let spinner = SKAction.rotateByAngle(CGFloat(M_PI), duration: 3)
    planet.runAction(SKAction.repeatActionForever(spinner), withKey: "planetSpin")

    addChild(planet)
  }
而这个

  func didBeginContact(contact: SKPhysicsContact) {

    if !hasLanded {
      if contact.bodyA.node!.name == "lander" {
        hasLanded = true
        print("bodyA contact")
        physicsWorld.speed = 0
        removeAllActions()
        removeActionForKey("planetSpin")
      } else if contact.bodyB.node!.name == "lander" {
        print("bodyB contact")
        hasLanded = true
        physicsWorld.speed = 0
        removeAllActions()
        removeActionForKey("planetSpin")
      }
    }
  }

您不是从行星节点删除动作,而是从场景或父节点或您的
didBeginContact
所属的任何节点删除动作


planet
设为类变量,并在
didBeginContact
中调用
planet.removeAllActions()

,这就是答案。谢谢