2

私のゲームは横長専用に設計されています (画面解像度 1024*768 - iPad 解像度)。

私のゲーム シーンは、PlayN がサポートするすべてのプラットフォーム (Android、html など) で正しくレンダリングされます。iOSのみの問題。

iPadの画面解像度、info.plistファイルのセットアップ、登録済みプラットフォームのすべてのリソースを用意しましたIOSPlatform.register(app, IOSPlatform.SupportedOrients.LANDSCAPES);

アプリケーションを実行すると、デバイスの向きに関するすべてが正しいのに、ゲーム シーンが完全にレンダリングされません。解像度 768*768 でレンダリングされ (すべてのシーン オブジェクトが表示されるわけではなく、768*768 rect に属するオブジェクトのみが表示されます)、残りの画面スペースは黒です。

私は次の方法で問題を調査しました。

  1. スケール変換を rootLayer に適用しました (シーン全体が確実にレンダリングされるようにするため)。PlayN.graphics().rootLayer().setScale(0.75f, 0.75f); 結果 - ゲーム シーンは 768*768 rect に収まり、すべてのゲーム シーン オブジェクトを表示できます。
  2. トランスレート変換を rootLayer に適用しました (PlayN が 768*768 rect の外にシーンをレンダリングしないようにするため)。 PlayN.graphics ().rootLayer().setTranslation(1024.0f - 768.0f, 0.0f); 結果 - ゲーム シーンは変換されますが、768*768 の画面四角形に属さないオブジェクトは表示されません。

私の推測では、PlayN は 768*1024 の画面解像度 (デフォルトの iPad の向きの解像度) に合わせて描画コンテキストを準備していると思います。画面をレンダリングすると、768*1024 の長方形の外側にあるオブジェクトが切り取られます (レンダリングされません)。

このような奇妙な動作を引き起こす可能性のあるヘルプやアイデアは非常に高く評価されます。

ありがとう!

4

2 に答える 2

1

問題は次のとおりです。

  • iOS は、デバイスの回転後にメイン ウィンドウ フレームとルート ビュー フレームを変更しません (Android は変更しますが、確認済みです)。
  • PlayN コードは、回転後のビュー サイズを 768*1024 (デフォルトの向き) から 1024*768 に変更することを想定しています。

実際の結果: PlayN は変換行列を使用してゲーム シーンを変換しますが、OpenGL フレームバッファ サイズは変更しません (フレームバッファ サイズは 768*1024 のままです)。

次のコードを に追加して、この問題を修正しましたIOSGLContext

@Override
public void setSize (int width, int height)
{
    if (UIDeviceOrientation.LandscapeLeft == orient || UIDeviceOrientation.LandscapeRight == orient)
    {
        Console.WriteLine("Swap IOSGLContext width and height for " + UIDeviceOrientation.wrap(orient));
        viewWidth = height;
        viewHeight = width;
    }
    else
    {
        viewWidth = width;
        viewHeight = height;
    }
    super.setSize(viewWidth, viewHeight);
}

これで、すべてが期待どおりに動作します!

この問題を解決する方法が他にある場合は、喜んで話し合います)

ありがとう!

于 2012-10-22T09:51:08.833 に答える
0

最新のPlayN-1.5スナップショットをダウンロードします(Googleコードからではなく-> https://github.com/threerings/playnから)。この問題はそのバージョンで修正されています

于 2012-10-23T18:51:20.757 に答える