5

私は Libgdx を使用して Android ゲームをコーディングしていますが、ご存知かもしれませんが、多くの画面解像度が正しく行われないと問題が発生します。したがって、ピクセルではなくこの DP 単位を使用しようとしています。

ただし、ここにこの方法があります。

public static float pixelToDP(float dp){
    return dp * Gdx.graphics.getDensity();
}

このGdx.graphics.getDensity()メソッドは実際に SCALE を取得するので、既に完了しています。

問題は、libgdx がクロス プラットフォームであり、テストに適していることです。解像度が 1920x1080、dpi がなんと 480 の S4 でこれを起動すると、1366x768 @ 92dpi のひどく高価なラップトップとは対照的に、必要な場所に正確に配置されます。デスクトップでは、X 軸と Y 軸で数百ピクセル離れています。

これは、画面の dpi が 92 dpi で測定され、解像度がかなり低く、実際のゲームがデスクトップ上でフルスクリーンではないという事実によるものですか?

オブジェクトを描画するコードは次のとおりです。

table.setPosition(MathHelper.pixelToDP(150), MathHelper.pixelToDP(200));

デスクトップで完璧にするには、次のことを行う必要があります。

table.setPosition(MathHelper.pixelToDP(480), MathHelper.pixelToDP(700));

縮尺は実際には 3 倍で、Y 軸上で画面から 200 ピクセル離れているため、これは私の電話でも見えません。

これを回避する方法はありますか?それとも、基本的に、プラットフォーム チェックとさまざまなコード ブロックを実行する必要がありますか?

考えられる解決策:

したがって、dp 変換方法を変更しました。100 * 0.5 を実行すると、新しい値 50 が返されますが、実際には元の値 100 + 100 * 0.5 が必要です。

これが適切な修正であるかどうかはわかりませんが、テーブルごとに関係なく、ラップトップと電話の両方でまったく同じ場所に描画されます。

public static float pixelToDP(float dp){
    if(Gdx.graphics.getDensity() < 1)
        return dp + dp * Gdx.graphics.getDensity();
    return dp * Gdx.graphics.getDensity();

これは単なる安価な修正ですか、それともこれはほとんどどのように行うべきですか?

4

4 に答える 4

4

密度に依存しないピクセルを使用するということは、すべての画面で表の物理サイズを同じにする必要があることを意味します。ラップトップの画面は (物理的に) はるかに大きいため、テーブルが予想よりもはるかに小さいことがわかります。

オブジェクトをサイズの分数で配置する別のアプローチをお勧めします。たとえば、幅の 30% または高さの 45% です。

これを実装するには、ステージの解像度を想定してオブジェクトを好きなように配置し、サイズ変更メソッドでビューポートを変更して、全体が表示されるようにします。それが役に立てば幸い。

詳細については、 https://code.google.com/p/libgdx-users/wiki/AspectRatio

于 2013-12-13T17:06:38.513 に答える
1

1 つのアプローチは、ビューポートのサイズを固定することです。たとえば 1366x768 のカメラを作成し、その座標を使用してすべてのオブジェクトを配置します。次に、カメラは他のすべての解像度の画面全体を埋めます。

cam = new OrthographicCamera(1366, 768);
于 2013-12-13T19:18:41.573 に答える
0

いくつかのチュートリアルを見てみてください...個人的には、ピクセルを処理するのが最善であり、カメラを使用すると非常に役立つと思います。このリンクを一度確認してください

異なる画面解像度の取得

于 2013-12-15T10:17:29.017 に答える