1

我正在surfaceView 中开发一个android 游戏。当我在不同设备上测试游戏时,playerSprite 在某些设备上的运行速度似乎比其他设备快。以编程方式设置播放器速度时如何适应不同的设备?

如果(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

我只会测量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 回答
0

当帧率不稳定时(例如每秒 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;

因此,无论哪里有东西在移动,你都可以通过这个因素来补偿移动。这样一来,在每秒 60 帧的机器上,每帧的移动速度都会减慢两倍,从而导致游戏以完全相同的速度移动。

确保您的帧率计算在每一帧都完成,并且必须以足够的精度完成。

于 2012-08-21T11:49:25.917 回答