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
}