0

画面内のオブジェクトの速度を上げる簡単な関数があります。

float Velocity = 10;
float MaxVelocity = 100;
float VelocityGiven = 0;

RectF position = new RectF(ScreenHeight/2, ScreenWidth,0,0);

public void update()
{
    if(VelocityGiven < MaxVelocity)
    {
           Position.left -= Velocity;
           VelocityGiven += Velocity;
    }

}

public void draw(Canvas canvas)
{
        canvas.drawBitmap(Bitmap,Position,null);
}

ただし、電話の画面サイズやピクセル密度によっては、この関数ではオブジェクトの移動が速すぎたり遅すぎたりします。

Galaxy S4で試してみると、魔女の画面解像度が非常に大きく、オブジェクトの動きが遅くなります。

しかし、ローエンドのデバイス (小さな画面) で試してみると、オブジェクトが非常に速く動きます。それを避けるにはどうすればよいでしょうか?

私はすでにすべての電話で FPS を制御しており、これは 30 FPS で実行されます。したがって、更新率についてではありません。

4

3 に答える 3

1

それはあなたが正確に何をしたいかによって異なります。単純なアプローチの 1 つは、すべてを画面サイズに比例させることです。例えば:

Position.left -= Velocity * getWidth() / REFERENCE_WIDTH;

ここで、REFENRENCE_WIDTH は、アプリが好きなように動作する画面解像度に対応します。

于 2013-09-30T15:33:07.780 に答える
0

密度に依存しない単位で作業する必要があります。こうすることで、ピクセル サイズに関係なく、同じ相対量で移動します。これを行うには、エリアの「大きさ」を決定します。たとえば、幅を論理的な1000 単位に固定するには、次のようにします。

float scaleWidth = (screenWidth / 1000);
float velocity = 10 * scaleWidth;
float maxVelocity = 100 * scaleWidth;

これは、実際のディスプレイの幅に関係なく、最大速度で全体を移動するには 10 回の移動が必要であることを意味します。

于 2013-09-30T15:33:23.040 に答える
0

画面サイズに関係なく、グリッド システムに基づいてオブジェクトを移動することをお勧めします。メートル、フィート、またはユニットとして機能するものなら何でも構いません。次に、デバイスの画面サイズと画面解像度を取得し、その関係を把握します。オブジェクトが片足で動く場合、デバイス上でのピクセル数は何ピクセルになります。解像度に基づく。

これは、Android の画面サイズに関する非常に一般的な概要です: http://developer.android.com/guide/practices/screens_support.html

デバイスの解像度とサイズを取得するために探す場所は、おそらくもっとたくさんあります。

少なくともあなたが始められることを願っています:)

于 2013-09-30T15:33:29.433 に答える