我正在处理我的游戏而且我已经停止了删除操作。
我有一套永远从右向左移动的管道(如飞鸟)。
我在函数内部创建了管道,并在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
是本地的,我无法做到。我该如何解决这个问题?
答案 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
}
当用户重放游戏时,您必须将丢失重置为假,以便您可以检测用户何时再次失去游戏