2014年11月24日

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

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

SKSceneのdelegate



SKSceneクラスにiOS8 SDKからdelegateが設定された。本書ではSceneクラスにdelegateを設定してそこへコールバックするコードを書いている。つまり競合するのだ。

もちろんiOS8以降でしか使わないならなんら問題はない。同じ定義が重なっている場合には特にエラーにはならない。でも、iOS7でも動かしたいと思うと問題だ。

「id delegate;」を宣言するだけなら問題はない。型も同じなのでコンパイルできる。だが、iOS7ではSKSceneのインスタンスにはプロバティのdelegateもインスタンス変数の_delegateもないのだから、setDelegate:を呼び出すときに実行時エラーになってしまう。

回避方法としては、自分用に作ったdelegateの名前を変えることが考えられる。
@property (weak,nonatomic) id myDelegate;


    if ( [self.myDelegate respondsToSelector:@selector(sceneEscape:)] ){
id dummy = (id)self.myDelegate;
[dummy sceneEscape:self];
}


実機で動作確認を



シミュレータでもほとんどの機能は使えるようなのだが、ごく一部に正常に動かない機能があるようだ。ほとんど正常に動いているだけに、ちょっとおかしいなと思ってもほとんど正常に動いているので自分のコードが悪いのかと思ってしまう。

とりあえず実機で動かしてみよう。そうすれば正常に動いているかもしれないから。

一つは、CoreImageを使った機能。SKEffectNodeクラスは特殊効果としてCoreImageのフィルターを設定できる。だが、シミュレータではほぼすべて正常に動作しない。SKEffectNodeを使った効果を確認する場合にはシミュレータではなく実機確認が必須。

十分確認したわけではないが、Overtakeサンプルを実行するときに座標変換がおかしくなる。anchorPointを移動しているのが原因ではないかと思うが、衝突判定時に渡されてくるSKContactのcontactPointが間違った値で返ってくる。そのためエフェクトなどがおかしな位置に発生する。実機で確認すると正常な位置にエフェクトが出る。

一体何が正常に動作してなにが正常に動作しないのか整理できていないが、であればちょっとでもおかしかったらまず実機で確認すべきだろう。できることなら最初から実機で動作確認することをおすすめしたい。
posted by 永遠製作所 at 14:55| 東京 ☁| Comment(0) | TrackBack(0) | iPhone/iPod touch | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

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

この広告は90日以上新しい記事の投稿がないブログに表示されております。