今日のアイフォンアプリ開発記録日誌、iPhoneシミュレータの判別方法メモ

今日のアイフォンアプリ開発記録日誌、iPhoneシミュレータの判別方法メモ

開発に関する記事複数のiOS機器の登録

複数台のMacで開発

(1)iPhoneシミュレータの判別方法メモ
シミュレータでアイフォン、アイパッドのRetinaレティナかどうかの判定ができないか探していますが、見つかりません。シミュレータでは、非RetinaにしてもRetinaが返ってくるので、解像度に合わせた確認ができないでいます。理由は、CGRectMakeで座標座業を取得しているので、Retinaかどうかで、画像を切り替える必要があるからです。スプライト一つに一つの画像を用いれば、もっと楽ですが、頻繁にファイルを読み込むので、電力消費と、FPSの低下が心配なので、テクスチャを一つにしてます。なお、切り替えるテクスチャ数が少ないので、info.plistは使っていません。

参考サイト
iPhone iPad iPhoneシミュレータの判別方法

iPhone SimulatorとiOSデバイスの判別

ProgrammerDidFinishWorking : iOSSDKで実機とシミュレータ実行の判別の仕方

シミュレータか実機か判別 / iPhoneOSか判別 – haneda部屋

アプリケーションを iPhone 4 の Retina Display に対応するための方法いろいろ – 24/7 twenty-four seven

(2)今日のアイフォンアプリ開発記録
1.アイパッドのデバイスを登録しました。これで、アイフォンとアイパッドで実機確認ができます。
2.アイパッドで実機確認をして、画像が正常に表示されていないバグ(コードのミスではない)がありました。
これは、ipadhd,ipad,hdという風に、ファイル名をつけますが、その通りになっていてもcocos2dの方で、正常に判別できていませんでした。そこで、アプリを実行する現在の機器がどの機種であるのかを表示サイズと比率で判別して画像を選別するようにしました。これは、画像単体をそのままスプライトにする場合は、問題ありません。
 判別はちょっと面倒でした。シミュレータ上では、レティナタイプと非Retinaタイプの判別はわかりませんでした。
この問題が発生するのは、CGRectMakeを使用して1枚のテクスチャから部分領域を切り取ってスプライト設定する場合に発生する問題です。
 その理由は、Retina対応によるものです。Retinaは2倍の密度を持つために、画像のピクセルが100ピクセルあるとすると、実際の表示は、50ピクセルになります。1対1の場合は、100ピクセルのサイズとなりますが、Retinaになると1:2になり、凝縮された画像のようになって半分の50ピクセルで表示されます。そのため、CGRectMakdeで領域を指定するときは、実際の半分の座標で領域を指定する必要があるのです。例えば、左上側から50ピクセルの高さと幅の画像領域を指定したいとすると、(0,0,50/2,50/2)または、(0,0,25,25)のように指定します。実際の大きさの半分のサイズで指定することで、Retina対応の機器は画面上で、25ピクセルの画像として表示します。
 そのため、Retinaの場合の領域指定と非Retinaの場合の領域指定は異なります。今回は、アイフォンRetinaとiPad非Retina,iPadRetinaの画像を用意しました。
 アイフォンのRetinaとアイパッド非Retinaはほぼ同じサイズとして使用しましたので、実質は2種類の画像を用意して、ファイル名を変更することにより、効率化しました。ただし、全体の画像容量は、単純にアイフォン1種類に比べて、3倍以上になります。
 しかし、できるだけ高解像度の画像を用意することで、実機で確認したときに、きれいな画像が表示されるのを確認するとやはり高解像度を使用した方が良いと実感しました。ドット絵を使用する賢いやり方もありますが、その場合は、キャラクターがカクカクしすぎてせっかくの高解像度が台無しになったような気がするからです。
 info.plistを使用していれば、たぶん問題とならないでしょう。ではなぜ、info.plistを使用しないのかというと、info.plistを使用するほど、スプライト数が多くないからです。また、画像の変更も多くて、いちいちinfo.plistを変更するのが、面倒だからです。また、扱うソフトを覚えるのも面倒というのも理由です。
 
 

<検討中>
3.ccTouchMovedで、スワイプしてもキャラが動かないシーンがありました。
1面ではEndのみ正常、ボス面は正常にスワイプできました。
1面とボス面は同じコードをコピペしていて、Diffでも同じでした。
原因は不明です。

とりあえず、同じコードといいながら違うコードを記載していることもあるので、動いてる方を動いていない方のコードに入れ替えてみます。

これで、動かないときは、どうしましょうか。
>いまここ

4.一時停止中にホームボタンを押して、アプリを切り替えるとアプリが勝手にアニメーションを開始していました。本来は、復帰後も一時停止となるはずです。
AppDelegate.mのapplicationDidBecomeActiveにシングルトンを設定しました。

参考サイト
cocos2d:アプリのpauseとresumeの注意点