大家好,我的2D游戏的移动速度各不相同。.我在台式机上制作游戏,运行正常,但随后我在笔记本电脑上玩,而播放器的移动速度则比台式机慢。
这是我当前的游戏循环:
public void gameLoop() throws IOException {
isRunning = true;
while(isRunning == true) {
Graphics2D g2d = (Graphics2D) strategy.getDrawGraphics();
//main game loop
//updates everything and draws
//main componenets
//e.g. Player
// clear the screen
g2d.setColor(Color.lightGray);
g2d.fillRect(0,0,640,496);
//drawing
player.paint(g2d);//paint player
map.paint(g2d);//paint each wall in wall list
g2d.dispose();
strategy.show();
//update
try { player.updateMovement(); } catch (Exception e) {};
try { Thread.sleep(4); } catch (Exception e) {};
}
}
这是我的player.updateMovement()方法:
public void updateMovement() {
if(!down || !up) {
ny = 0;
}
if(!left || !right) {
nx = 0;
}
if(left) {
nx = -1;
}
if(right) {
nx = 1;
}
if(up) {
ny = -1;
}
if(down) {
ny = 1;
}
if ((nx != 0) || (ny != 0)) {
x += nx;
y += ny;
}
}
如何解决此问题?
最佳答案
您可能有一个固定速率的绘图循环:每个迭代都应持续相同的时间,如果还剩下一些时间,请休眠该时间量。例如,如果我们将周期固定为41.6毫秒(24 fps),并且某个迭代持续20毫秒,那么您应该休眠41.6-20 = 21.6毫秒。
如果您的代码太重而无法在那时在低端PC上运行,则可以增加时间间隔,以便每台计算机都可以应对。
顺便说一句,您还可以优化代码。
您可以在gaming.stackexange.com上找到更多信息。