###前提・実現したいこと
xcode8 と swift3を使っています。
現在SwiftのSpriteKitを使って簡単な2Dグラフィック横スクロールゲームを作成しています。
ボールのプレイヤー、壁を配置し加速度センサーを使用して
壁に当たらないようにプレイヤーをスタートからゴールへとコントロールする
ゲーム内容です。
ステージは今の所1から4まで作成しました。
ステージ4をクリアしたらゲーム終了です。
###問題
ゲームを進めていきステージ1〜3までは問題なくシーンが推移表示されるのですが
ステージ3から4へシーンを推移する時だけコンソールに下記のエラーメッセージが出てアプリがクラッシュしてしまいます。
Message from debugger: Terminated due to memory issue
メモリーに関するエラーのようなのですが具体的にどうすればいいのか
分からず困っています。
どのような原因が考えられますでしょうか。
どうぞよろしくお願いいたします。
###試したこと
GameViewController.swiftの一番初めに表示するSceneを
ステージ1からではなくステージ4からにすると問題なく表示されました。
しかしステージ1から進めていくとやはりステージ3から4の間でエラーが出ます。
ちなみにremoveallchildrenをコード内に入れてません。
(追記)
その後MemoryのモニタリングをしていたところSceneを描画するたびに
Memoryの数値が上がっていきステージ4を描画する頃には600MBを超えており
その拍子にアプリがクラッシュしてしまうようです。
そこまでは分かったのですがどうすれば解決できるのかが分かりません。
コード内にremoveallchildrenを入れましたが変わらず。
根本的に何かが間違っているのでしょうか。
ご教授いただければ大変助かります。よろしくお願いいたします。
Swift
1import SpriteKit 2import CoreMotion 3 4class Stage1Scene: SKScene, SKPhysicsContactDelegate { 5 6 //衝突判定用のカテゴリー設定 7 struct ColliderType { 8 static let player_cat: UInt32 = ( 1 << 0) 9 static let pipe_cat: UInt32 = ( 1 << 1) 10 static let goal_cat: UInt32 = ( 1 << 2) 11 } 12 13 //motionManager生成 14 var motionManager: CMMotionManager! 15 16 //プレイヤー変数宣言 17 var player = SKSpriteNode(imageNamed: "metal") 18 var playerXposition: Double = 0 19 var playerYposition: Double = 0 20 21 //カメラノード宣言 22 var cameraNode: SKCameraNode! 23 24//起動時処理 25 override func didMove(to view: SKView) { 26 self.physicsWorld.gravity = CGVector.zero 27 self.physicsBody = SKPhysicsBody(edgeLoopFrom: self.frame) 28 self.physicsWorld.contactDelegate = self 29 30 motionManager = CMMotionManager() 31 motionManager.accelerometerUpdateInterval = 0.1 32 motionManager.startAccelerometerUpdates(to: OperationQueue.main,withHandler: {(accelerometerData:CMAccelerometerData?, error:Error?) -> Void in 33 34 35 self.playerXposition = accelerometerData!.acceleration.y * 20 36 self.playerYposition = accelerometerData!.acceleration.x * -20 37 }) 38 39 cameraNode = childNode(withName: "cameraNode") as? SKCameraNode 40 let zoomIn = SKAction.scale(to: 0.2, duration: 0) 41 cameraNode.run(zoomIn) 42} 43 44 //タッチ開始時 45 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 46 for touch: AnyObject in touches { 47 let location = touch.location(in: self) 48 let touchedNode = self.atPoint(location) 49 50 if (touchedNode == nextSprite) { 51 52 self.isPaused = false 53 label.text = "" 54 55 self.removeAllChildren() 56 //ステージ2へのシーンの推移 57 let scene = Stage2Scene(fileNamed: "Stage2Scene") 58 let transition = SKTransition.fade(with: UIColor.white, duration: 2.0) 59 scene?.scaleMode = SKSceneScaleMode.aspectFill 60 self.view?.presentScene(scene!, transition: transition) 61 62 //全てのスプライトを削除 63 self.removeAllChildren() 64 self.removeAllActions() 65 66 } 67
回答3件
あなたの回答
tips
プレビュー