Search code examples
sprite-kitskaction

How to completely remove SKAction from the view


So I have a game where you need to shoot enemies. When touchesBegan a bullet comes under your finger, when touchesEnded – it fires at enemy. I made it with SKActions. It's working well until it's game over. I don't have a special scene for it, it's just a node with buttons. But when it appears, SKActions on bullet and enemies are still running by touch. I want to disable them when it's game over and don't know how to do it. For example, one of my enemis I created like this:

func addMiddleHeart() {
    middleheart = SKSpriteNode(imageNamed: "redh")
    middleheart.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame) + 100)
    middleheart.zPosition = 1
    middleheart.physicsBody = SKPhysicsBody(circleOfRadius: middleheart.size.width / 2)
    middleheart.physicsBody?.dynamic = true
    middleheart.physicsBody?.categoryBitMask = PhysicsCategory.MiddleHeart
    middleheart.physicsBody?.contactTestBitMask = PhysicsCategory.Arrow
    middleheart.physicsBody?.collisionBitMask = PhysicsCategory.None
    addChild(middleheart)

    let moveToPoint = SKAction.moveTo(CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame) + leftHeart.size.height * 1.5), duration: 0.5)
    SKActionTimingMode.EaseOut
    middleheart.runAction(moveToPoint)
}

      override func didMoveToView(view: SKView) {
 runAction(SKAction.runBlock(addMiddleHeart))
}

Solution

  • gameScene.removeAllActions() is the statement that you want to use. It'll indiscriminately remove all running SKActions.