SpriteKitで物理演算をしようと思い、二種類の方法でSKPhysicsBodyをSKSpriteNodeに組み込んだのですが、一方の方法がものすごい重くなってしまいます。Xcodeで処理中のCPUの使用率の遷移を見ると、重くなっている方では症状が現れる瞬間にPhysicsの項目がとても高くなっていました。行ったのは以下の2つの手法です。
画像ファイルの名前はapple.pngとします。
①通常通り、ソースコードと同じ階層にあるpngファイルを読み込み、物理ボディをつける。
swift
1let sprite = SKSpriteNode(imageNamed: "apple.png") 2print(sprite.size) // =>(547.0, 456.0) 3sprite.physicsBody = SKPhysicsBody(texture: sprite.texture, size: sprite.size) 4self.addChild(sprite)
この方法だと、複数のapple同士がぶつかっても滑らかに描画が行われました。
②アプリのローカルディレクトリからpngファイルを読み込み、物理ボディをつける。
swift
1let path = NSHomeDirectory() + "/Library/Application Support/pngPictures/apple.png" 2let texture = SKTexture(imageNamed: path) 3print(texture.size()) // =>(547.0, 456.0) 4let sprite = SKSpriteNode(texture: texture) 5print(sprite.size) // =>(547.0, 456.0) 6sprite.physicsBody = SKPhysicsBody(texture: sprite.texture, size: sprite.size) 7self.addChild(sprite)
このように、アプリのローカルディレクトリにあるpng形式の画像ファイルを読み込み、それに対して物理ボディを付加すると、複数のapple同士がぶつかる直前からfpsが60→4のような異常な落ち込みを見せ、cpu使用率のphysicsの項目が跳ね上がります。なぜ、ファイルの場所が変わっただけで全く同じファイルなのにこんなにも処理速度に違いが生まれてしまうのでしょうか...
自分が作っているアプリではどうしてもアプリのローカルディレクトリから画像を読み込みたいのですが、この二番目の手法でも描画速度を落とさないためにはどうすれば良いでしょうか?なんでもいいので、気づいたことがあればアドバイスいただきたいです。