Swift在函数中停止SKAction.repeatForever?

时间:2017-03-21 15:10:54

标签: swift background sprite-kit skaction

我试图阻止我的背景碰撞。

这就是创造和移动背景的原因:

 let bgTexture = SKTexture(imageNamed: "bg.png")
    let moveBGanimation = SKAction.move(by: CGVector(dx: 0, dy: -bgTexture.size().height), duration: 4)
    let shiftBGAnimation = SKAction.move(by: CGVector(dx: 0, dy: bgTexture.size().height), duration: 0)
    let moveBGForever = SKAction.repeatForever(SKAction.sequence([moveBGanimation, shiftBGAnimation]))

    var i: CGFloat = 0

    while i < 3 {

        bg = SKSpriteNode(texture: bgTexture)
        bg.position = CGPoint(x: self.frame.midX, y: bgTexture.size().height * i)
        bg.size.width = self.frame.width
        bg.zPosition = -2

        bg.run(moveBGForever)
        self.addChild(bg)

        i += 1


    }

如何停止bg.run(moveBGForever?我尝试过bg.removeAllActions()并尝试将其添加到密钥中,但这不会做任何事情。

if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue {



}

2 个答案:

答案 0 :(得分:4)

之所以发生这种情况是因为您不应该创建while周期来重复某个操作,但您必须创建一个:

let myCode = SKAction.run{
    bg = SKSpriteNode(texture: bgTexture)
    bg.position = CGPoint(x: self.frame.midX, y: bgTexture.size().height * i)
    bg.size.width = self.frame.width
    bg.zPosition = -2
    ...
}
let actionRepeated = SKAction.repeat(mycode,count:3)

在您的情况下,您可以重复此操作3次。 之后,无论何时需要停止,都可以运行或停止actionRepeated给它一个键。

答案 1 :(得分:1)

您可能需要重新构建代码。而不是使用你的&#39;而不是周期:

while i < 3 {
...
}

您应该使用.repeat(yourBgActions, count:3)