2013-06-20 7 views
0

here에서 기사를 읽었습니다.Java에서 시간대를 수정하십시오.

는하지만 내가 자바에 그 번역 할 수없는 것, 그리고 그에서 나는이 의미 :

double t = 0.0; 
const double dt = 0.01; 

double currentTime = hires_time_in_seconds(); 
double accumulator = 0.0; 

State previous; 
State current; 

while (!quit) 
{ 
    double newTime = time(); 
    double frameTime = newTime - currentTime; 
    if (frameTime > 0.25) 
      frameTime = 0.25; // note: max frame time to avoid spiral of death 
    currentTime = newTime; 

    accumulator += frameTime; 

    while (accumulator >= dt) 
    { 
      previousState = currentState; 
      integrate(currentState, t, dt); 
      t += dt; 
      accumulator -= dt; 
    } 

    const double alpha = accumulator/dt; 

    State state = currentState*alpha + previousState * (1.0 - alpha); 

    render(state); 
} 

그가 사용하는 State 클래스 무엇입니까? 코드를 다운로드했는데 그 코드를 찾을 수 없었습니다. Java에서 코드는 어떻게 생겼을까요?

답변

2

상태는 추상적 아이디어입니다. 그는 방금 숫자를 보간 중입니다. 예를 들어, state는 엔티티의 x 위치 일 수 있습니다.

당신을 위해 예 : 내 물리학 게임에서

float x = x*alpha+oldX*(1-alpha); 

, 나는 각 렌더링하는 동안 내 모든 개체에 알파 값을 통과시켰다. 그들은 자신의 위치에 대한 가장 가까운 근사치를 계산하기 위해 렌더링하는 동안 이것을 사용할 것입니다. 나는 당신이 똑같이 할 것을 제안 할 것이다. 렌더 루틴에서 알파를 허용하고 각 객체가 이전 상태를 추적하게하십시오.

따라서 모든 엔티티는 마지막 위치와 현재 위치를 사용하여 렌더링 할 때 실제 위치를 추측합니다.

EDIT :

public class Entity{ 
    double oldX; 
    double oldY; 
    double x; 
    double y; 
    public void render(Graphics g, float alpha){ 
     float estimatedX = x*alpha+oldX*(1-alpha); 
     float estimatedY = y*alpha+oldY*(1-alpha); 
     g.drawRect((int)estimatedX,(int)estimatedY,1,1); 
    } 
} 
+0

오, 난을 참조하십시오. 하지만 Java에서 코드가 어떻게 보이겠습니까? 또한'hires_time_in_seconds();'는'System.currentTimeMillis()/1000;'을 의미합니다. – Romeo

+0

예, hires_time_in_seconds()의 의미입니다. 자바의 코드는 실제로 수행하려는 작업에 따라 다르지만 예제를 작성하겠습니다 ... –

+0

알겠습니다. 고맙습니다! – Romeo

1

그것은 각 축적 단계 이전에 현재 위치 및 속도를 포함하는 간단한 구조이다. 그것은이 previous tutorial에 정의되어, 또한 코드에서 Timestep.cpp의 시작 부분에 해당 페이지에서 다운로드 할 수 있습니다

struct State 
{ 
    float x;   // position 
    float v;   // velocity 
};