我正在使用surfaceView开发一款安卓游戏。当我在不同设备上测试游戏时,与其他设备相比,某些设备上的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);
}
答案 0 :(得分: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是长值。
答案 1 :(得分: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帧的机器上,每帧的速度只会移动两倍,这样游戏就会以完全相同的速度移动。
确保帧速率计算在每个帧都完成,并且必须以足够的精度完成。