新しいiPhoneも16:9になりそうです。大きなニュースはありません。
Cocos2d 2.0 を使用し、 3:2 画面をターゲットにして 1 年半前に開始したアプリを配信する必要があります。これは、開発および描画されるすべてのグラフィックスが 3:2 画面用に考慮されていることを意味します。
私が見つけた最良の解決策は次のとおりです。余分なスペースを使用して、このスケッチに示されているように、ジョイスティックとゲーム内の情報をいくつか含めます。
16:9 デバイスで実行していることを検出する方法を指定する回答が既にいくつかあります。ただし、ここでの私の質問は..デフォルトでアプリに配置されている上下の黒い境界線をどのように処理できますか?
それらをシフトして、下部にある黒い境界線を1つだけ取得し、これにジョイスティックを追加できる追加の入力レイヤーをオーバーレイする方法はありますか?
解決策についていくつかの仮説があります:
仮説 A: CCScene のアンカー ポイントを変更し、何らかの方法で上部に移動します。現時点では CGPointZero に設定されていますが、この値は使用するデバイスによって異なります。ただし、値を (0,0) にハードコーディングしてみましたが、実際には何も変わりません。
anchorPointInPoints_ = anchorPoint_ =CGPointMake(0.0f, 0.0f);
仮説 B: CCScene 描画メソッドを変更して、親 UIView オブジェクトでビューを上に移動します。ただし、これを行う方法がわかりません。変換マトリックスが関係している可能性があります。
仮説Aは機能していないように見えるので、おそらくBが最善の方法です。しかし、問題をさらに掘り下げる前に、すでに問題を解決した人がいるかどうか疑問に思っていました.
私を正しい方向に向ける助けがあれば大歓迎です。
編集: CGPointMake が 3:2 で動作することを想定して使用しています。実際、私の知る限りでは、Retina デバイスと非 Retina デバイスの両方で、高さに 480、幅に 320 を使用するという規則がありました。これにより、コーディングが大幅に簡素化されました。ただし、新しい 16:9 デバイスでこの点が変わったかどうかはわかりません。もしそうなら、これは私の問題を解決するための一歩かもしれませんが、もちろん、これを適切にサポートするために各シーンに追加のコードを追加する必要があることを意味します.
編集 2: LearnCocos2D の回答に対する 2 番目のコメントを参照してください。
+ (id) sceneWithLevelName:(LevelName)name
{
CCScene *scene = [CCScene node];
//I tried scene.position = CGPointMake(0,88); but happens as described in my comment to Learncocos2d's answer
ShooterScene * shooterLayer = [[self alloc] initWithId:name];
[scene addChild:shooterLayer];
//I also tried to modify this layer (shooterLayer) but same proble, the black border stay.
return scene;
}