0

私はゲームを作成しています (Eclipse と Android SDK を使用するだけです)。テキスト ファイル入力に基づくレベル構築機能があります。

したがって、たとえば、「levelone.txt」には「[2,5]、[14,7]、[10,9]」が含まれる場合があります。このファイルが読み込まれると、3 つのプラットフォームが作成され、それらの位置に送信されます。

これは私のテスト電話 (240x320) では問題なく動作しますが、はるかに大きな画面 (720x1280) の友人の電話で試してみると、座標がすべて間違っており、隅の小さなスペースしか占めていません。画面サイズに応じて座標をスケーリングして、すべてのAndroidデバイスで動作するように、これまでに持っていたものをどのように適応させることができますか?

4

1 に答える 1

2

レベル ローダーのスケーリングの背後にある計算は、実際にはかなり単純です。まず、デフォルトのスケールを選択することから始めてください。つまり、プラットフォームの座標と寸法とともに、240x320 の画面解像度を取得します。

スケーリングするには、ゲームが実行されているデバイスの画面解像度を知る必要があります。以下は、画面解像度を取得します。

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

API 13 より前をターゲットにしている場合は、display.getSize を使用できません。代わりに、次を使用する必要があります。

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

新しい解像度が得られたので、デフォルトの解像度 (240x320) と新しいデバイスの解像度の違いを見つけることができます。

float xScale = (float)width / 240.0f;
float yScale = (float)height / 320.0f;

これらの値を強制的に float または double にすることが重要です。整数のままにしておくと、10 進数の値が省略され、丸められた整数になるため、適切にスケーリングされません。これは正確ではなく、適切なスケーリングができません。

スケールを取得したら、それに応じてオブジェクトのサイズ変更と移動を開始できます。

たとえば、最初のプラットフォームの位置が

int x = 200;
int y = 120;

次に、これらの値を取得してスケールで乗算するだけです。

int x = (int)(200 * xScale);
int y = (int)(120 * yScale);

プラットフォームの寸法についてもこれを行う必要があります。

int width = (int)(30 * xScale);
int height = (int)(15 * yScale);

30 と 15 をプラットフォームの幅と高さに置き換える

重要: この方法で座標をスケーリングする場合は、すべての座標をスケーリングする必要があります。これは、境界と衝突を検出するために座標を使用している場合、それらも一致するようにスケーリングする必要があることを意味します。

これは、Android デバイスの解像度を取得する方法に関する別の投稿です。

画面解像度の取得

これがお役に立てば幸いです。

于 2013-05-27T07:29:15.187 に答える