SpriteKit 中带有 Swift 的 NSTimer 能够构建但崩溃
NSTimer with Swift in SpriteKit able to build but crashes
我正在尝试创建一个新的 NSTimer 对象来简单地将我的计数器增加 1 秒(以计算我的游戏的生命周期)现在我已经看到了关于如何去做的演示和示例,并且已经做了同样的事情事情,但该项目继续失败。有什么建议吗?
这是错误消息:
无法识别的选择器发送到实例 0x7a83c7d0
import SpriteKit
var timerObject = NSTimer()
var count = 0
let timer = SKLabelNode(text: "0")
class GameScene: SKScene , SKPhysicsContactDelegate {
override func didMoveToView(view: SKView) {
timerObject = NSTimer.scheduledTimerWithTimeInterval( 1 , target: self , selector: Selector("result"), userInfo: nil, repeats: true)
func result(){
count++
timer.text = String(count)
}
我也这样写了函数"result",但还是崩溃了
func result() {
count+= 0
timer.text = "\(count)"
}
您的 NSTimer
回调签名错误。试试这个:
func result(aTimer: NSTimer!) {
count+= 0
timer.text = "\(count)"
}
我相信您还需要将选择器传递为 "result:":
timerObject = NSTimer.scheduledTimerWithTimeInterval( 1 , target: self , selector: "result:", userInfo: nil, repeats: true)
我为所有遇到同样问题的人提出了答案,我遇到了错误消息:无法识别的选择器发送到实例 0x7a83c7d0 好吧,解决方案实际上非常简单,我已经在 viewDidLoad 中初始化了我的 timerObject 对象更具体地说,错误指出方法结果不是 gameScene 的一部分
只需将您选择的选择器功能移动到 viewDidLoad 下方,它应该可以正常工作
class GameScene: SKScene , SKPhysicsContactDelegate {
var timer = NSTimer()
var count = 0
let lableTimer = SKLabelNode(text: "0")
override func didMoveToView(view: SKView) {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "result", userInfo: nil, repeats: true)
lableTimer.position = timerPosition
lableTimer.fontSize = 40
self.addChild(lableTimer)
}
func result(){
count++
lableTimer.text = String(count)
}
此外,我已将所有初始变量移入 GameScene class 而不是顶部。
我正在尝试创建一个新的 NSTimer 对象来简单地将我的计数器增加 1 秒(以计算我的游戏的生命周期)现在我已经看到了关于如何去做的演示和示例,并且已经做了同样的事情事情,但该项目继续失败。有什么建议吗?
这是错误消息:
无法识别的选择器发送到实例 0x7a83c7d0
import SpriteKit
var timerObject = NSTimer()
var count = 0
let timer = SKLabelNode(text: "0")
class GameScene: SKScene , SKPhysicsContactDelegate {
override func didMoveToView(view: SKView) {
timerObject = NSTimer.scheduledTimerWithTimeInterval( 1 , target: self , selector: Selector("result"), userInfo: nil, repeats: true)
func result(){
count++
timer.text = String(count)
}
我也这样写了函数"result",但还是崩溃了
func result() {
count+= 0
timer.text = "\(count)"
}
您的 NSTimer
回调签名错误。试试这个:
func result(aTimer: NSTimer!) {
count+= 0
timer.text = "\(count)"
}
我相信您还需要将选择器传递为 "result:":
timerObject = NSTimer.scheduledTimerWithTimeInterval( 1 , target: self , selector: "result:", userInfo: nil, repeats: true)
我为所有遇到同样问题的人提出了答案,我遇到了错误消息:无法识别的选择器发送到实例 0x7a83c7d0 好吧,解决方案实际上非常简单,我已经在 viewDidLoad 中初始化了我的 timerObject 对象更具体地说,错误指出方法结果不是 gameScene 的一部分 只需将您选择的选择器功能移动到 viewDidLoad 下方,它应该可以正常工作
class GameScene: SKScene , SKPhysicsContactDelegate {
var timer = NSTimer()
var count = 0
let lableTimer = SKLabelNode(text: "0")
override func didMoveToView(view: SKView) {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "result", userInfo: nil, repeats: true)
lableTimer.position = timerPosition
lableTimer.fontSize = 40
self.addChild(lableTimer)
}
func result(){
count++
lableTimer.text = String(count)
}
此外,我已将所有初始变量移入 GameScene class 而不是顶部。