2014年11月23日

iOS8に適用する『Sprite Kit iPhone 2Dゲームプログラミング』(その1)

前項で紹介した『Sprite Kit iPhone 2Dゲームプログラミング』はiOS7時代に書かれたもので、現時点のiOS8とは少しばかり違いがある。このiOS7とiOS8の違いに着目して実装する時の注意点をまとめたい。

SKSceneの初期化



各ゲーム場面ごとの基盤となるSKScene。このクラスのインスタンスを生成するのに-initWithSize:を使うのではなく、Interface Builderに似たXcodeのGUIツールを使って作成できるようになっている。プロジェクトテンプレートで作るとGameScene.sksというファイルが作られ、このファイルを編集することで様々な初期設定ができるようになっている。そのためView Controllerからは-initWithSize:が呼ばれない。

画面が.sksアーカイブファイルから読み込まれて表示されたときに呼ばれるのは-didMoveToView:なので、initiWithSize:で書く初期化コードはここに書くといい。もちろん、.sksファイルを使わずに従来通りalloc - initで生成するのもよい。

WWDC 2014のセッションビデオを見るとGUIツールでは画面の設定だけではなくノードの初期配置などもできるようでそこまでできれば単調なコードの羅列になる初期化処理が随分簡単にできるはずだが、GUIツールの使い方がいまいちわからない。

画面サイズ



書籍内では4inch前提で背景画像が作れらている。が、iOS8ではiPhone6, iPhone6 Plusが発売され4.7inch, 5.5inchにも対応する必要がある。ほとんどは画面サイズの中心や画面最上部など矩形を動的に取得する書き方がされているので問題ないが背景画像は調整しないとまずい。


UIImage *anImage;
anImage = [UIImage imageNamed:@"GameBack.png"];
CGSize imageSize = anImage.size;
SKSpriteNode *backNode;
backNode = [SKSpriteNode spriteNodeWithImageNamed:@"GameBack.png"];
backNode.name = BACK_NAME;
backNode.position = CGPointMake(self.size.width/2, self.size.height/2);
backNode.xScale = self.size.width / imageSize.width;
backNode.yScale = self.size.height / imageSize.height;
[self addChild:backNode];


画面全体にフィットするように拡張している。iPhone5系とiPhone6系はアスペクト比が同じだから上記でも問題ない。3.5inchのiPhone3/4にも対応するには考慮が必要。

Bombエフェクト



iOS7でのSpriteKit開発をしていないのでわからないが本の記述から見るとパーティクルのテンプレートにBombというのがあったようだ。が、iOS8(Xcode6.1)ではテンプレートのリスト中にその名前が見えない。そこでサンプルコードのファイルから.sksファイルを開いて設定を引き写してみた。

Sparkテンプレートを使ってBombファイルを作成し、インスペクターで表示の通りに各パラメータを調整すると...爆発っぽくなったであろうか?

Bomb.png

bomb_effect.png

(その2)に続く
posted by 永遠製作所 at 16:49| 東京 ☀| Comment(0) | TrackBack(0) | iPhone/iPod touch | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/409436188
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック