SpriteKitでシューティングゲームを作っているのですが、
Timerを使って60秒後に特定の処理(実際はedgeLoopを設定)を
しているのですが、途中30秒後にゲームオーバーとなって別の
Sceneに移行しても、まだそのタイマーが有効なままになってしまい、
エラーが出てしまいます。
自分なりに調べてTimerはランループに登録され、
強参照となっているのでそれをSceneが移行する時に
削除しないといけないといけないようなのですが、タイマーは
リピートなしで発射してる為、gameTimer?.invalidate()では
発射した内容がすでに削除されている(?)ため、削除されないようです。
Timer変数をweakにしたりprivateにしてもダメでした。
根本的にTimerの使い方を理解してないからだと思うのですが、
ご教授いただければ助かります。
class Game8Scene: SKScene, SKPhysicsContactDelegate {
var gameTimer:Timer!
override func didMove(to view: SKView) {
gameTimer = Timer.scheduledTimer( timeInterval: 30.0, target: self, selector: #selector(gameover), userInfo: nil, repeats: false )
gameTimer = Timer.scheduledTimer( timeInterval: 60.0, target: self, selector: #selector(消したい処理), userInfo: nil, repeats: false )
}
@objc func gameover(){
gameTimer?.invalidate()
let scene = GameOverScene(size: self.size)
let skView = self.view as! GameSKView!
skView?.presentScene(scene)
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/18 06:40
2018/03/18 16:12
2018/03/18 17:25