2015-01-11 2 views
0

Я хочу, чтобы игра за экраном и игра останавливались, когда экран касался во время конкретной анимации.Когда экран коснулся, как мне закончить игру?

let lightTexture = SKTexture(imageNamed: "green light.png") 
    let lightTexture2 = SKTexture(imageNamed: "red light.png") 

    let animateGreenLight = SKAction.sequence([SKAction.waitForDuration(2.0, withRange: 0.1), SKAction.animateWithTextures([lightTexture, lightTexture2], timePerFrame: 3)]) 
    let changeGreenLight = SKAction.repeatActionForever(animateGreenLight) 


    let animateRedLight = SKAction.sequence([SKAction.waitForDuration(2.0, withRange: 0.1), SKAction.animateWithTextures([lightTexture, lightTexture2], timePerFrame: 3)]) 
    let changeRedLight = SKAction.repeatActionForever(animateRedLight) 


    let greenLight = SKSpriteNode(texture: lightTexture) 
    greenLight.position = CGPointMake(CGRectGetMidX(self.frame), 650) 
    greenLight.runAction(changeGreenLight) 

    self.addChild(greenLight) 

    let redLight = SKSpriteNode(texture: lightTexture2) 
    redLight.position = CGPointMake(CGRectGetMidX(self.frame), 650) 
    redLight.runAction(changeRedLight) 

    self.addChild(redLight) 

Когда анимация для красного света находится на экране, я хочу, чтобы это была игра. Должен ли я делать оператор if, и если да, то что конкретно?

Спасибо заранее!

ответ

0

Вы можете сделать себе другой узел, который имеет тот же размер и положение, что и красный свет. Кроме того, этот узел способен обрабатывать события касания. Затем добавьте этот узел перед запуском анимации. Это может быть сделано с последовательностью действий, например:

let addAction = SKAction.runBlock({ self.addChild(touchNode) }) 
let animationAction = SKAction.repeatActionForever(animateRedLight) 

redLight.runAction(SKAction.sequence([ addAction, animationAction ])) 

Update

Так как вы хотите игру до конца, когда вы касаетесь в любом месте, изменить код таким образом, что блок устанавливает переменную, которая указывает что анимация выполняется и реализует touchesBegan, которая проверяет эту переменную, например

let addAction = SKAction.runBlock({ self.redLightAnimationRuns = true }) 

[...] 

// In touchesBegan 
if touched 
{ 
    if redLightAnimationRuns 
    { 
     endGame() 
    } 
} 
+0

вар touchNode = SKSpriteNode() touchNode.size = redLight.size touchNode.position = CGPointMake (CGRectGetMidX (self.frame), 650) пусть AddAction = SKAction.runBlock ({self.addChild (self.touchNode)}) пусть animationAction = SKAction.repeatActionForever (animateRedLight) redLight.runAction (SKAction.sequence ([AddAction, animationAction])) Это то, что Я добавил, когда я пишу self.addChild (touchNode), приложение вылетает. Кроме того, я не думаю, что анимация для touchNode запущена. –

+0

Как сделать так, чтобы при каждом касании экрана игра заканчивалась. –

+0

См. Мой обновленный ответ. –

0

использовать функцию touchesBegan() для вызова функции GameOver(), когда красный свет на экран (который вы можете управлять с помощью переменной).

Итак, когда на экран поступает красный свет, переменной redLightCurrent присваивается значение true. в TouchesBegan(), когда redLightCurrent истинно, затем вызовите функцию gameOver(), где вы можете включить, что делать, когда игра закончена. Это произойдет, только когда на экране начнется прикосновение.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    super.touchesBegan(touches, withEvent: event) 
    let array = Array(touches) 
    let touch = array[0] as UITouch 
    let touchLocation = touch.locationInNode(self) 

    if redLightCurrent { 
     gameOver() 
    } 
    } 

Этот код работает с новым Xcode 7 и Swift 2.0

Смежные вопросы