ゲームのiOS画面サイズ対応策【Sprite Kit, iOS8】
突然ですが、iPhone6が出てからずーっと個人的に課題になっていた問題の一応の対応策ができましたのでメモします。
【ここ数ヶ月密かに悩んでいた課題】
・ゲームは320x480ピクセルで画面をつくっている。iPhone4s以前ならちょうどいいサイズ。
・iPhone5で縦サイズが長くなった->画面下にバナーを出すことでしのぐ。リジェクトもされない。
・iPhone6,6+ではさらに横サイズも大きくなった->いやもう勘弁して。
いままで動いていたコードをそのまま使うと以下のような悲劇が。(シミュレーターのスクショ)
iPhone4s
iPhone5
ここまではいい、ここまでは。
iPhone6
iPhone6+
どおせええっちゅうねんんんんんんんん!
しばらく放置していました。
そしてAndroidアプリ開発に手を出していて、Sprite Kitもスケールをいじればなんとかなるんじゃ?と閃いて、しばらくGooglingしてイロイロ試していたらなんか対応できました。
GameViewController.mで
- (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; // Configure the view. SKView * skView = (SKView *)self.view; //set the view only once, if the device orientation is // rotating viewWillLayoutSubviews will be called again if (!skView.scene) { skView.showsFPS = NO; skView.showsNodeCount = NO; /* Sprite Kit applies additional optimizations to improve rendering performance */ skView.ignoresSiblingOrder = YES; CGSize gameSize; gameSize.width=320; if (skView.frame.size.height>480){ //iPhone5以降 gameSize.height=568; } else { //iPhone4s gameSize.height=480; } // Create and configure the scene. GameScene *scene = [GameScene sceneWithSize:gameSize]; scene.scaleMode = SKSceneScaleModeAspectFill; // Present the scene. [skView presentScene:scene]; } }
ポイントは、勝手に画面サイズをつくってそれをsceneWithSizeでどかんと放り込むという、わかっちゃえばダイレクトかつシンプルな策でしたとさ。
これでちょっとモチベーション回復!