retina対応してみました

 昨日、作ったゲームを iTunes Connect 提出しました〜。
 retina対応です。で、retina対応にした時の事をまとめてみました。


 今までは320×480の解像度でしたが、iPhone4や新しいiPod Touchretinaディスプレイ
その倍の解像度になっています。
 解像度のpixelで説明すると、2種類の数値を用意する必要が出てきて面倒。
 多分そういう事情から、両方に対応するための論理的な単位として"point"が生まれたと思います。
 実際の画素は"pixel"です。
 今までのものは、1point = 1pixel。retinaは、1point = 2pixcel。


 参考にしたサイトはこちらです。


 OpenGLESで作っているので、このpoint、pixel対応、プロジェクション設定が効いて簡単、
と高を括っていたら、ハマりました。


uiImage = [[UIImage alloc] initWithContentsOfFile:path];


 これが勝手に@2x付きのretina用画像ファイルを読み込んでくれるんです。

 テクスチャとUVが狂ったような画面になりました。orz
 (読み込むのはシミュレータだけ。実機では読み込まないのでしたorz


 今まで動いていたバージョンに戻した所、また、ハマりました。
 同じ症状が出るんです。


 いやマジ泣きそうになりましたよ。
 知らない内に何かに侵食されたような気分。。。
 試しにアプリを捨ててみたら直りました。
 と言う事は、と、原因を調べたら、原因判明。
 一度リソースに登録したら、リンクを切っても、ファイルをゴミ箱に捨てても、ゾンビが残っているんです。
 対処方法は、クリーニング。そしてビルド。


 スプライトはプロジェクションの設定だけで済んだのですが、スプライトで作っているフォント表示で、
テクスチャのサイズから切り出すUV位置を特定している箇所があり、そこの修正。
 実際のテクスチャサイズは、_realWidth,_realHeightなんですが、ポイント対応のものが必要と分かり、
_pointWidth,_pointHeighを用意。
 それに置き換えて終了〜。


 もう一つ対応の必要があったのが、ポイントスプライト。
 表示するだけだと画像ファイルが切り替わって終了。
 なのですが、実はポイントスプライト、ちょっとずれるんです。
 おおよそテクスチャサイズの1/8程。
 そのずれの補正に_realWidth,_realHeighを使っていたのですが、そこも_pointWidth,_pointHeighに置き換えて解決。


 問題なのは処理速度。
 エミュレータではヌルヌル動く。
 実機テストしたら問題なかったので良かったです。
 (テストに協力頂いた@caos1027さん、ありがとうございました〜♪)
 3Gでも60fps出るように調整したのが良かったみたいです。


 あ、@2xのretina用画像ファイルを読み込ませるのは、retina対応かどうかを調べて、そうだったら

NSString* path= "hoge.png";
path = [path stringByReplacingOccurrencesOfString:@"." withString:@"@2x."];


 とやると、@"hoge.png"というファイル名が@"hoge@2x.png"に変わります。
 "."がある事が前提ですけど。