私は 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();
これは単なる安価な修正ですか、それともこれはほとんどどのように行うべきですか?