メモリリーク!?動作が重くなる!?・・・swiftアプリ開発
シューティングゲーム??開発
これまではゲームシーンのみに取り組んでいましたが、ようやく初期タイトル画面などに取り掛かりました( ^ω^ )
これでようやく全体的なイメージが浮かんでくるので、ちょっとだけやる気がでるというものです
だが!!!!!!
これまでになんども苦しまされてきた、メモリリークの壁が立ちはだかるのである・・・
今回で3作ということでviewController間の移動はスムージー・・・
スムーズにいかない。
今回で3作目なのだけれども、viewController間での移動はスムージー・・・
スムーズにいかない。
以前と違ってゲームオーバーシーンの表示に別クラスを使用しているのですが その違いが仇となりました。
class TouchScene: SKScene { override func didMoveToView(view: SKView) { self.anchorPoint = CGPoint(x: 0.5, y: 0.5) var button = SKSpriteNode(imageNamed: "button") button.position = CGPoint(x: 0, y: 0) button.zPosition = 140 button.name = "button" self.addChild(button) } override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { for touch: AnyObject in touches{ let location = touch.locationInNode(self) let touchNode = self.nodeAtPoint(location) if touchNode.name == "button"{ let transition = SKTransition.flipVerticalWithDuration(1.0) let scene = GameScene() scene.scaleMode = .AspectFill scene.size = self.size self.view?.presentScene(scene,transition: transition) } } } }
このクラスを👇
func createImageScene(imageName: String) -> SKScene{ let scene = TouchScene(size: self.size) let sprite = SKSpriteNode(imageNamed: imageName) sprite.size = scene.size sprite.position = CGPoint(x: 0, y: 0) scene.addChild(sprite) return scene }
こんな感じで使ってゲームオーバーの表示をしています(ほとんど参考書通り)
これでTouchSceneクラスにもう一個画像を追加してタッチしたら、タイトル画面に移行するようにしたかったのですが、
delegateで設定しても、エラーは出ないけどメソッドが呼ばれなかったり
segueを設定してもなんの反応もなかったのです。。。
まぁやり方はいろいろあるのでしょうけど、このままだとまったく進まない不幸な事態に突入するので
ストーリーボードでボタンを置いて、普段は隠しておいてゲームオーバーで表示させるようにしました。
もっとスマートにコードのみでやりたかったんだけどな´д` ;
重くなる?
とりあえずそんな感じで重くならないかテスト!
マックのシュミレーターで、タイトル→ゲーム→タイトル→ゲーム・・・
と繰り返すと、5回に1回くらい重くなる!
なんなのこれは?´д` ;
アプリ作るたびに動作が重くなる現象が起こるので、今回も少しトラウマ・・・
でも基本的にはちゃんと動くんだよな・・・ネットで調べても5回に1回重くなるとかピンポイントでは出てこないし
weak とか unwindowsegue とかわからないなりに使って今の状態なので、これ以上はどう対策したらわからんのですねぇ
とりあえず実機でも試したら、こちらは意外と正常に動く・・・
もしかしてそういう仕様だったとかかえ!?
でもすでに公開しているアプリもちゃんと動いていた気がしたんだけどな、、、公開してみたら重くてダメだったしo(`ω´ )o
まぁとりあえずこの問題は放置して、他の部分に着手しよ( ^ω^ )