2013-06-22 4 views
0

내 콘솔에 "Delta : 0.0"이 계속 많으며 "델타 : 9.999275207519531E-4"와 같은 것을 얻을 수있는 줄은 몇 번입니까?LWJGL 타이머가 작동하지 않습니까?

Timer timer = new Timer(); 
    float lastTime = 0.0f; 
    timer.resume(); 
    while (!Display.isCloseRequested()) 
    { 
     timer.tick(); 
     System.out.println("Delta: " + (timer.getTime() - lastTime)); 

     lastTime = timer.getTime(); 

     Display.update(); 
    } 

    Display.destroy(); 

답변

1

게임 루프에서 java 클래스를 사용하지 마십시오. 안정적으로 사용하기에는 정확하지 않습니다. 대신 this 링크를 확인하여 자바로 작성된 신뢰할 수있는 게임 루프를 확인하십시오.

0

작은 메모 하나만 경고합니다. 타이밍 메커니즘에 결함이 있습니다.
이 코드가 작성 될 때마다 한 줄씩 실행된다는 점을 고려하면 시간이 "느슨 할"것입니다.
1. 현재 시간 얻기 :이

System.out.println("Delta: " + (timer.getTime() - lastTime)); 
lastTime = timer.getTime(); 

코드는 다음을 수행합니다.
2. 일부 수학.
3. String 생성자를 호출합니다.
4. 문자열 연결 수행.
5. 변수 lastTime에 현재 시간을 씁니다.

현재 시간 1 및 5 경우가 다르다는 것을 유의해야한다. 즉,이 시간은 "지연 : xx"출력에서 "손실"됩니다.

코드에서 (timer.getTime() - lastTime) 기술을 계속 사용하면 이전 반복에서 경과 된 시간을 얻으려는 목적으로 이전 반복에서 경과 된 시간이 다른 이벤트라고 생각하는 문제가 발생합니다. 나는 당신이 타이밍에 대해 다음 코드를 사용하는 것이 좋습니다 : updateTime()는 사이클 당 한 번 호출되고 getDelta()이 이전 반복에서 전달 시간을 얻을 할 때마다 호출

private double delta; 
private long timing; 

public void updateTime() 
{ 
    long newTime = System.nanoTime(); 
    this.delta = (newTime - this.timing)/1_000_000_000.0; 
    this.timing = newTime; 
} 

public double getDelta() { 
    return this.delta; 
} 

.