2012-12-21 3 views
2

나는 HTML5의 캔버스로 놀기로 결심했다. 물론 그것은 내가 탁구 게임을 쓰려고 노력할 것임을 의미한다. 현재로서는 프레임 속도를 제한하는 방법을 알아 내려고하고 있습니다. 이것은 다른 언어에서는 매우 쉽지만, 자바 스크립트에서 실행을 지연시키는 방법을 찾는 것은 다소 어려워 보입니다.자바 스크립트 타이머 지연

while(true) { 
    var begin = (new Date()).getTime(); 

    //Draw stuff to the canvas 

    var end = (new Date()).getTime(); 
    if ((end-begin) < 33.333) { 
     //delay (1000/(30-(end-begin))) 
    } 
} 

물론, 프레임 속도 때문에 각각의 자바 스크립트 엔진이 수행하는 방법에 격렬하게 다를 수 있습니다,하지만 난 30FPS에서 최대 프레임 속도를 모자하려는 : 여기

는 내가 지금까지 가지고있는 것입니다. setTimeout()이이 작업을 수행하는 방법을 실제로 알지 못합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

+1

'setInterval'을 사용해 보셨습니까? 비선형 시계처럼 확실히 알고 있어야 할 몇 가지 이슈가 있지만, 적어도 이것은 당신이 조금 "잠"수있게합니다. – Halcyon

+4

[requestAnimationFrame (click me)] (http://paulirish.com/2011/requestanimationframe-for-smart-animating/)을 확인하면 약 60,000FPS (또는 클라이언트에 가장 적합한 모든 것)를 제공합니다. –

+0

위의 설명과 관련 : programmers.stackexchange.com/questions/175934/whats-the-best-way-to-use-requestanimationframe-and-fixed-frame-rates – m90

답변

7

JavaScript에 delay/wait이 없습니다. 당신은 특정 시간이 경과 한 후, 함수를 호출하는 window.setTimeout 같은 예 기능을 사용할 수 있습니다 :

window.setTimeout(function() { 
    // do something interesting 
}, 2000 /* but after 2000 ms */); 

을 아니면 프레임마다 33 밀리 초 (~ 30 프레임)을 칠하고 싶은 말은, 당신은 같은 코드합니다 :

window.setInterval(function() { 
    // paint my frame 
}, 33); 
+1

나는 window.setInterval보다는 'window.setTimeInterval'. – gpojd

+0

죄송합니다. 그것을 정정하십시오. – closure