Swift 如何在SpriteKit中将计时器自动停止在0?

Swift 如何在SpriteKit中将计时器自动停止在0?,swift,timer,sprite-kit,Swift,Timer,Sprite Kit,请记住,这是在雪碧套件。基本上,我想要一种在计时器上进行游戏内升级的方法,允许用户在计时器完成后进行升级。用户只需按一下按钮即可启动计时器,一旦计时器归零,计时器就会自动停止。然而,我无法让它停止 import Foundation import SpriteKit var timer1Cycle = 0 var timer1Time = 10000 var timer1 = Timer() var timer1IsOn = false class SkillPointsScene: S

请记住,这是在雪碧套件。基本上,我想要一种在计时器上进行游戏内升级的方法,允许用户在计时器完成后进行升级。用户只需按一下按钮即可启动计时器,一旦计时器归零,计时器就会自动停止。然而,我无法让它停止

import Foundation
import SpriteKit


var timer1Cycle = 0
var timer1Time = 10000
var timer1 = Timer()
var timer1IsOn = false


class SkillPointsScene: SKScene{

func updateTimer1() {
  timer1Time -= 1
  timer1Label.text = " \(timer1Time) :Kepler-22b units"
}


func startTimer1(){
    if timer1IsOn == false {

    timer1 = Timer.scheduledTimer(timeInterval: 0.0004, target: self,    selector: #selector(SkillPointsScene.updateTimer1), userInfo: nil, repeats: true)
        timer1IsOn = true
    }
}

func stopTimer1() {
    timer1.invalidate()
    timer1Time = 0
    timer1Label.text = "Research Complete"
    timer1IsOn = false
}
下面是从10000开始倒计时的图像按钮:

let oneLifeImage = SKSpriteNode(imageNamed: "gun1")

let timer1Label = SKLabelNode(fontNamed: "theBoldFontt")



// runs as soon as the screen loads every time
override func didMove(to view: SKView) {


    if timer1Time <= 0 {
        self.stopTimer1()
    }

    let background = SKSpriteNode(imageNamed: "background")
    background.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
    background.zPosition = 0
    self.addChild(background)

    timer1Label.text = " "
    timer1Label.fontSize = 35
    timer1Label.fontColor = SKColor.white
    timer1Label.position = CGPoint(x: self.size.width*0.5, y: self.size.height*0.82)
    timer1Label.zPosition = 100
    self.addChild(timer1Label)



    oneLifeImage.setScale(1)
    oneLifeImage.position = CGPoint(x: self.size.width/2, y: self.size.height*0.75)
    oneLifeImage.zPosition = 2
    self.addChild(oneLifeImage)
let oneLifeImage=SKSpriteNode(图像名为:“gun1”)
让timer1Label=SKLabelNode(fontname:“theBoldFontt”)
//每次加载屏幕后立即运行
覆盖func didMove(到视图:SKView){

如果timer1Time是第一件事。使用SKAction而不是Timer。Timer不与游戏循环配对,它需要(在某个点上)自定义暂停实现。因此,使用适当的
wait
持续时间执行一个操作,并在其完成处理程序中执行所需操作…或者创建一个操作序列并实现完成处理程序(块)作为序列中的最后一个对象,您自己也不会调用stopTimer,您需要在update timer1Time==0时调用它,而不是在didMove阶段
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch: AnyObject in touches{
        let pointOfTouch = touch.location(in: self)
        let wait = SKAction.wait(forDuration: 1.5)


        if oneLifeImage.contains(pointOfTouch){
            if timer1Cycle == 0 {
                timer1Time = 10000
            }
            if timer1Cycle == 1 {
                timer1Time = 25000
            }


            if timer1IsOn == false {
            startTimer1()
                timer1Cycle -= 1
            }