嘿,我的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;
}
}
如何解决此问题?
答案 0 :(得分:1)
你可以有一个固定速率的绘图循环:每次迭代应该持续相同,如果剩下一些时间,那就睡一段时间。例如,如果我们确定41.6 ms(即24 fps)的周期,并且某个迭代持续20 ms,那么你应该睡41.6 - 20 = 21.6 ms。
如果您的代码太重而无法在低端PC上运行,那么您可以增加时间段,以便每台机器都可以应对它。
顺便说一下,您还可以优化代码。
您可以在games.stackexange.com找到更多信息