删除函数

时间:2015-08-04 17:08:11

标签: swift sprite-kit

我正在处理我的游戏而且我已经停止了删除操作。 我有一套永远从右向左移动的管道(如飞鸟)。 我在函数内部创建了管道,并在didMoveToView内部移动了它们。因此,在管道功能内部,我创建管道并运行操作。 (我简化了代码)

func initPipes() {
    let pipePair = SKNode()
    pipePair.position = CGPoint(x: self.frame.size.width + 70, y: 0)
    //PIPE 1
    let pipe1 = SKSpriteNode(color: SKColor.whiteColor(), size: CGSizeMake(70, 700))

    //here i set physics and position

    pipePair.addChild(pipe1)

    //PIPE 2
    let pipe2 = SKSpriteNode(color: SKColor.whiteColor(), size: CGSizeMake(70, 700))

    //same as pipe1

    pipePair.addChild(pipe2)

    //SCORE
    let scoreSprite = SKSpriteNode(color: SKColor.clearColor(), size: CGSize(width: 50, height: 150))

    pipePair.addChild(scoreSprite)

    pipePair.runAction(moveAndRemove, withKey: "move")
    pipes.addChild(pipePair)

}

当检测到碰撞时,我运行gameOver功能。如果我写的话,在这个函数里面:

removeActionForKey("move")
管道继续移动。也许是因为我必须写pipePair.removeActionForKey("move")。但由于pipePair是本地的,我无法做到。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您可以为pipePair节点命名:

pipePair.name = "pipePair"

然后您可以在gameOver方法中停止“移动”操作,如下所示:

let pipePair = pipes.childNodeWithName("pipePair")

if(pipePair.actionForKey("move") != nil){


     pipePair.removeActionForKey("move")
}

我想这可能是一种方法。

答案 1 :(得分:0)

如果游戏丢失,请尝试制作一个bool变量来检测更新内部。

class GameScene: SKScene { 
var lost = false

override func update(currentTime: NSTimeInterval) {

if lost {

removeActionForKey("move")

}
}

func loseGame() {
lost = true

}

当用户重放游戏时,您必须将丢失重置为假,以便您可以检测用户何时再次失去游戏