Android游戏-精灵的速度在不同的手机上似乎有所不同
我正在surfaceView中开发一款android游戏。当我在不同的设备上测试游戏时,playerSprite在某些设备上的速度似乎比其他设备快。 以编程方式设置播放器速度时,如何适应不同的设备 if(MainActivity.slowSpeed==true){Android游戏-精灵的速度在不同的手机上似乎有所不同,android,performance,sprite,Android,Performance,Sprite,我正在surfaceView中开发一款android游戏。当我在不同的设备上测试游戏时,playerSprite在某些设备上的速度似乎比其他设备快。 以编程方式设置播放器速度时,如何适应不同的设备 if(MainActivity.slowSpeed==true){ 我只会测量onDraw调用之间的时间,如果时间太短,我会等待 while( t1 - t0 < MINIMUM_FRAME_TIME ){ // you could put a short wait(#) here if
我只会测量
onDraw
调用之间的时间,如果时间太短,我会等待
while( t1 - t0 < MINIMUM_FRAME_TIME ){
// you could put a short wait(#) here if you wanted.
t1 = System.currentTimeMillis();
}
t0 = t1;
while(t1-t0<最小帧时间){
//如果你愿意,你可以在这里稍等一会儿。
t1=System.currentTimeMillis();
}
t0=t1;
t0、t1和最小帧时间都是长值。当帧速率不稳定(如每秒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帧的机器上,每帧的移动速度都是原来的两倍,这就导致游戏以完全相同的速度移动
请确保每帧都进行帧速率计算,并且必须以足够的精度进行计算。除非您描述您的实现并发布一些代码,否则无法回答您的问题。@Egor我已粘贴了我的代码。我只是预先设置对象的速度,并且始终保持不变。但是在不同的设备上播放体验不同。在某些设备上,对象似乎移动得更快,而在另一个设备上,对象移动得更慢。尽管在这些设备上获得的帧几乎相似。每秒34帧。这种方法将消耗大量处理器周期并耗尽电池。最好是检查时差,然后让线程运行睡觉
playerX += speedX * framerateAdjustFactor;