나는 매 프레임마다 tick()
메서드를 실행하는 프로그램을 가지고있다. 객체가 설정된 중력 상수에 따라 떨어지기를 원했기 때문에, 이전 프레임에서 y 속도를 뺀 위치로 위치를 업데이트하는 Ball
객체를 만들었습니다. y 속도는 각 틱마다 중력 상수만큼 감소합니다. 그러나 진드기가 곧바로 초로 변환되지 않기 때문에 가을이 너무 빠릅니다. 나는 기본적인 수학을 놓치고 있다고 생각하지만, 나는 그것이 무엇인지를 볼 수없는 많은 변수를 저글링하고있다.시간을 FPS와 독립적으로 만드는 방법은 무엇입니까?
편집 : 각 업데이트 프레임 추가 코드
@Override
public void run(){
init();
long lastTime=System.nanoTime(), timer=System.currentTimeMillis();
final double ticks=60.0;
double ns=1000000000/ticks, delta=0;
int updates=0, frames=0;
while(running){
long now=System.nanoTime();
delta+=(now-lastTime)/ns;
lastTime=now;
if(delta>=1){
tick();
updates++;
delta--;
}
render();
frames++;
if((System.currentTimeMillis()-timer)>1000){
timer+=1000;
System.out.println(updates+" ticks, FPS "+frames);
frame.setTitle("Ball -- "+SCALEWIDTH+"x"+SCALEHEIGHT+" at "+frames+" FPS");
updates=0;
frames=0;
}
}
stop();
}
'tick()'함수는 시간 델타 (마지막 틱 이후 경과 한 시간)를 반환 할 수 있습니다. 그런 다음 새로운 y- 속도를 계산할 때이를 사용할 수 있습니다. – freshtop
프로그램을 재분석해야한다고 생각합니다. 튜토리얼에서 수정되었습니다. 일반적으로 무엇을 찾고 있습니까? 진드기 사이의 시간 간격으로 프레임 속도를 나눠서 "실시간"을 얻으시겠습니까? – Insederec
Java의 경우에는 아무 것도 나누지 않습니다. 방금 System.nanotime()을 호출하고이 차이를 사용하여 마지막 호출 이후 경과 한 시간을 확인합니다. 그 차이가 당신의 시간 단계입니다. – markspace