所以我正在制作一个连接到服务器的游戏,其中x,y等的所有计算都将使用经过的时间来完成。在显示图形的客户端上,我正在使用paintcomponent()和repaint()来绘制图形。可以使用这种方法吗?因为在不同的计算机上,角色移动的速度将根据计算机运行paintcomponent()的速度而有所不同。假设我在运行游戏时得到200fps ..这是否意味着paintcomponent被称为每秒200次?对于速度较慢的计算机,如果60fps,则调用paintcomponent方法,即每秒60次? (我正在使用getframerate方法来查找framrate)
目标:我的目标是让游戏在所有机器上运行相同,而不是根据计算机的速度而变化
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.clearRect(0, 0, WIDTH, HEIGHT);
if (gameState == 0) { // main menu
menuScreen.draw(g); // draw main menu screen
} else if (gameState == 1) { // instructions
instrScreen.draw(g);
} else if (gameState == 2) { // options
optionsScreen.draw(g); // draw options screen
} else if (gameState == 3) { // game
man.draw(g); // test
if (upKey) {
man.changeDirection("UP");
man.move();
//outputToServer("W");
}
if (downKey) {
man.changeDirection("DOWN");
man.move();
//outputToServer("S");
}
if (leftKey) {
man.changeDirection("LEFT");
man.move();
//outputToServer("A");
}
if (rightKey) {
man.changeDirection("RIGHT");
man.move();
//outputToServer("D");
}
}
g.setColor(Color.BLACK);
g.drawString(getFrameRate(), 10, 15);
repaint();
}
private String getFrameRate() {
long currentTime = System.currentTimeMillis();
deltaTime += currentTime - lastTimeCheck;
lastTimeCheck = currentTime;
frameCount++;
if (deltaTime >= 1000) {
frameRate = frameCount + "fps";
frameCount = 0;
deltaTime = 0;
}
return frameRate;
}