我会尽力解释我的意思。
我正在开发一款 2d 游戏。当我在小屏幕上运行下面的代码时,它比在大屏幕上运行相同的代码更快。我认为这取决于游戏循环的迭代在大屏幕上比在小屏幕上花费更多的时间。我如何实现 time unit
或其他不依赖于游戏循环迭代的东西?
private void createDebris(){
if(dx<=0) return;
if(stepDebris==2){
Debris debris = new Debris(gameActivity, dx-=1280*coefX/77, 800*coefY-50*coefY, coefX, coefY);
synchronized (necessaryObjects) {
necessaryObjects.add(debris);
}
stepDebris=-1;
Log.e("COUNT", (count++)+"");
}
stepDebris++;
}
附言 fragment 是画在 Canvas 上的视觉对象。我会很感激你的回答。谢谢。
最佳答案
如果 stepDebris 是您在屏幕上移动对象的单位 - 那么在每次绘制调用时增加它是错误的,因为它将移动速率与帧率联系在一起。
你想要的是这样的
stepDebris += elapsedMilliseconds * speedFactor
其中 elapsedMilliseconds 是游戏开始后耗时(以毫秒为单位)。一旦您为 stepDebris 找到正确的 speedFactor - 无论帧率如何,它都会在不同的机器/分辨率上以相同的速度移动。
希望这对您有所帮助!
关于Android实时游戏——实现时间单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10915862/