1

surfaceView で Android ゲームを開発しています。さまざまなデバイスでゲームをテストすると、playerSprite は他のデバイスと比較して一部のデバイスで高速に動作するようです。プログラムでプレーヤーの速度を設定するときに、さまざまなデバイスに対応するにはどうすればよいですか?

if(MainActivity.slowSpeed == true){

             speedX = (float) (canvasWidth/266);

             speedY = (float)(canvasHeight/150);




         }




         if(MainActivity.fastSpeed == true){

             speedX = (float) (canvasWidth/192);

             speedY =(float) (canvasHeight/108);



         }
4

2 に答える 2

0

フレームレートが安定していない場合(1秒あたり30または60フレームなど)、ゲーム内のすべての可動要素を、達成した実際のフレームレートから計算した係数で補正する必要があります。

 achievedFramerate = 34.0f;    //The framerate you dynamically measure
 baseFramerate = 30.0f;        //The framerate at which your game is meant to be played
 framerateAdjustFactor = baseFramerate / achievedFramerate;

あなたはそれをあなたのゲームのどこかでそのように使用します:

 playerX += speedX * framerateAdjustFactor;

したがって、何かが動いているところならどこでも、この係数で動きを補正します。このように、1秒間に60フレームの能力があるマシンでは、すべてがフレームごとに2倍遅く移動するため、ゲームはまったく同じ速度で移動します。

フレームレートの計算はフレームごとに行われ、適切な精度で行われる必要があります。

于 2012-08-21T11:49:25.917 に答える
0

通話間の時間を測定しonDraw、短すぎる場合は待機します。

while( t1 - t0 < MINIMUM_FRAME_TIME ){
    // you could put a short wait(#) here if you wanted.
    t1 = System.currentTimeMillis();
}
t0 = t1;

t0、t1、および MINIMUM_FRAME_TIME は長い値です。

于 2012-08-21T11:20:19.237 に答える