2015-05-29 3 views
0

Я только начал изучать, как программировать игры для Apple, и я искал, как остановить таймер. В следующем коде я хочу остановить таймер, который я создал, но у меня возникают проблемы с его остановкой. я понятия не имею. Пожалуйста, помогите мне! Спасибо!Как остановить таймер?

класс игры: SKScene {

var Ball = SKSpriteNode(imageNamed: "Red.png") 
var QuitOption = SKLabelNode() 
var ScoreLabel = SKLabelNode() 
var timescore = Int() 
var timesecond = Int() 
var locked = false 




override func didMoveToView(view: SKView) { 


    backgroundColor = SKColor.blackColor() // background for the display 

    self.physicsWorld.gravity = CGVectorMake(0, -9.8) 

    let SceneBody = SKPhysicsBody(edgeLoopFromRect: self.frame) 
    SceneBody.friction = 0 
    self.physicsBody = SceneBody 


    Ball.size = CGSize(width: 120, height: 120) 
    Ball.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height*0.7) 
    Ball.physicsBody = SKPhysicsBody(circleOfRadius: 60) 
    Ball.physicsBody?.affectedByGravity = true 
    Ball.physicsBody?.restitution = 0.1 
    Ball.physicsBody?.linearDamping = 0 
    Ball.name = "Ball" 

    self.addChild(Ball) 

    QuitOption.text = "Quit" 
    QuitOption.fontName = "Noteworthy-Light" 
    QuitOption.fontColor = SKColor.greenColor() 
    QuitOption.fontSize = 35 
    QuitOption.position = CGPoint(x: self.frame.size.width/2 - 160, y: self.frame.size.height*1 - 110) 
    QuitOption.name = "Quit" 

    addChild(QuitOption) 

    ScoreLabel = SKLabelNode(fontNamed: "Noteworthy-Light") 
    ScoreLabel.fontSize = 50     // The + will move it to the right side and - to the left side for more accuracy. 
    ScoreLabel.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/4 + 400) // position of ScoreLabelNode 
    ScoreLabel.name = "Score+" 
    ScoreLabel.hidden = false 

    self.addChild(ScoreLabel) 


} 

// Making the ball jump after user touches ball 

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


    var touch = touches.first as! UITouch 
    var location = touch.previousLocationInNode(self) 
    // var location = touch.locationInNode(self) 
    var node = self.nodeAtPoint(location) 


    if (node.name == "Quit"){ 

     let myScene = GameScene(size: self.size) 
     myScene.scaleMode = scaleMode 
     let reveal = SKTransition.fadeWithDuration(1) 
     self.view?.presentScene(myScene, transition: reveal) 

    } 

    if (node.name == "Ball"){ 

     for touch: AnyObject in touches { 

      let location = touch.locationInNode(Ball) 

      Ball.physicsBody?.allowsRotation = true 
      Ball.physicsBody?.velocity = CGVectorMake(0, 0) 
      Ball.physicsBody?.applyImpulse(CGVectorMake(0, 100)) 

     } 


    } 

    if(!self.locked){ 

     self.locked = true 

    var actionrun = SKAction.waitForDuration(0.5) 

    var actionwait = SKAction.runBlock({ 

     var stopTimer = false 

     self.timescore++ 
     self.timesecond++ 


     if self.timesecond == 60 {self.timesecond = 0} 

     self.ScoreLabel.text = " \(self.timescore/60):\(self.timesecond)"}) 

    ScoreLabel.runAction(SKAction.repeatActionForever(SKAction.sequence([actionrun,actionwait]))) 



    } 


} 

}

ответ

1

Не 100% уверен, что если я понимаю ваш вопрос. Но если «Таймер» имеет в виду вашего циклов, в действии, вы можете сделать это:

// This is just running your action with a name "scoreAction" 
let loopAction = SKAction.repeatActionForever(
    SKAction.sequence([actionrun,actionwait])) 
ScoreLabel.runAction(loopAction, withKey: "scoreAction") 

Позже где-то в вас код вы можете остановить это действие:

ScoreLabel.removeActionForKey("scoreAction") 

UPDATE:

Если вы хотите только приостановить или приостановить анимацию, вы можете использовать свойство paused для объектов, которые вы хотите приостановить.

ScoreLabel.pause = true 

Это хорошо, чтобы знать, что .pause будет влиять на узел и дочерние узлы. Вы можете приостановить всю сцену, например:

self.pause = true 

Даже SKScene является «узлом».

+0

То, что я пытаюсь сделать, это остановить таймер. когда я нажимаю шарик, начинается таймер. поэтому я хочу остановить таймер, когда мяч попадает в нижний кадр устройства. –

+0

Ваш код действительно помог! я просто должен был изменить его на тот, который у меня был! Спасибо !! –

+0

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

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