Tôi đang viết một vòng lặp trò chơi, tôi đã tìm thấy mã trong ví dụ bên dưới here. Tôi cũng đã xem xét các cách khác để thực hiện một vòng lặp trò chơi, chẳng hạn như từ this article. Tôi không thể nhận được bất kỳ của những người làm việc mặc dù. Vì vậy, tôi giữ với một từ liên kết đầu tiên.Vòng lặp trò chơi chính Java
Những gì tôi muốn biết:
- có phải là cách tôi đã viết vòng lặp trò chơi của tôi một cách tốt để làm điều này?
- Bất kỳ đề xuất nào?
- Tôi có nên sử dụng
Thread.sleep();
trong vòng lặp trò chơi của mình không?
Đây là mã hiện tại của tôi:
public void run(){
long lastLoopTime = System.nanoTime();
final int TARGET_FPS = 60;
final long OPTIMAL_TIME = 1000000000/TARGET_FPS;
long lastFpsTime = 0;
while(true){
long now = System.nanoTime();
long updateLength = now - lastLoopTime;
lastLoopTime = now;
double delta = updateLength/((double)OPTIMAL_TIME);
lastFpsTime += updateLength;
if(lastFpsTime >= 1000000000){
lastFpsTime = 0;
}
this.updateGame(delta);
this.repaint();
try{
Room.gameTime = (lastLoopTime - System.nanoTime() + OPTIMAL_TIME)/1000000;
System.out.println(Room.gameTime);
Thread.sleep(Room.gameTime);
}catch(Exception e){
}
}
Tôi có một bài về vòng trò chơi và giữ nó ổn định [ở đây] (http://stackoverflow.com/question/17847930/custom-vsync-algorithm/18070011 # 18070011). –