gpt4 book ai didi

swift - 如何实现 SpriteKit 计时器?

转载 作者:IT王子 更新时间:2023-10-29 05:30:01 25 4
gpt4 key购买 nike

我目前正在尝试为我的 sprite kit 游戏实现一个计时器,但我没有让它工作。定时器的初始值始终保持不变。

我假设我需要以某种方式/某处更新标签,但我不知道如何和在哪里:?我不明白这一点。有什么想法吗?

这是我的 GameScene 类中的代码

    let levelTimerLabel = SKLabelNode(fontNamed: "Chalkduster")
var levelTimerValue: Int = 500

var levelTimer = NSTimer()

func startLevelTimer() {

levelTimerLabel.fontColor = SKColor.blackColor()
levelTimerLabel.fontSize = 40
levelTimerLabel.position = CGPoint(x: size.width/2, y: size.height/2 + 350)
addChild(levelTimerLabel)

levelTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("levelCountdown"), userInfo: nil, repeats: true)

levelTimerLabel.text = String(levelTimerValue)

}

func levelCountdown(){

levelTimerValue--

}

最佳答案

对于 SpriteKit 中的此类任务,我会坚持使用 SKActions,因为 NSTimer 不受场景或 View 暂停状态的影响,因此它可能会引导您陷入困境。或者至少,它会要求您实现暂停功能,以便在某些情况下暂停您的计时器,例如当用户暂停场景或接听电话时等。阅读更多 here关于 SKAction vs NSTimer vs GCD SpriteKit 中与时间相关的操作。

import SpriteKit

class GameScene: SKScene {

var levelTimerLabel = SKLabelNode(fontNamed: "ArialMT")

//Immediately after leveTimerValue variable is set, update label's text
var levelTimerValue: Int = 500 {
didSet {
levelTimerLabel.text = "Time left: \(levelTimerValue)"
}
}

override func didMoveToView(view: SKView) {



levelTimerLabel.fontColor = SKColor.blackColor()
levelTimerLabel.fontSize = 40
levelTimerLabel.position = CGPoint(x: size.width/2, y: size.height/2 + 350)
levelTimerLabel.text = "Time left: \(levelTimerValue)"
addChild(levelTimerLabel)

let wait = SKAction.waitForDuration(0.5) //change countdown speed here
let block = SKAction.runBlock({
[unowned self] in

if self.levelTimerValue > 0{
self.levelTimerValue--
}else{
self.removeActionForKey("countdown")
}
})
let sequence = SKAction.sequence([wait,block])

runAction(SKAction.repeatActionForever(sequence), withKey: "countdown")
}

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

//Stop the countdown action

if actionForKey("countdown") != nil {removeActionForKey("countdown")}
}
}

关于swift - 如何实现 SpriteKit 计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35140099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com