retina対応してみました
昨日、作ったゲームを iTunes Connect 提出しました〜。
retina対応です。で、retina対応にした時の事をまとめてみました。
今までは320×480の解像度でしたが、iPhone4や新しいiPod Touchのretinaディスプレイ、
その倍の解像度になっています。
解像度の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"に変わります。
"."がある事が前提ですけど。