2016-07-30 2 views
0

저는 render 함수를 루프로 실행해야하는 비디오 게임 엔진을 만들려고합니다. 이 기능이 완료되면, 난 다시 실행하려면, 다시, 다시 ... 그러나 나는이를하려고하면함수를 무한 시간 실행하십시오.

function render() { 
    // some code here which takes ~ 0.00015 second to run 
} 

while(1) { render(); } 

몇 초 브라우저 동결. 또한

function render() { 
    // some code here which takes ~ 0.00015 second to run 
} 

setTimeout(render); 
// I've tried also 
setTimeout(render, 1); 

: 그래서 다른 방법으로 시도했습니다

function render() { 
    // some code here which takes ~ 0.00015 second to run 

    setTimeout(render); 
    // OR 
    setTimeout(render, 1); 
} 

을하지만 함수를 두 번째로 만 ~ 500 회를 실행, 나는 ~ 5000 번을 실행합니다. 실행 시간 (0.00015 초)을 보면 가능하지만 그렇게 할 수있는 방법을 찾을 수 없습니다.

누구나 아이디어가 있습니까?

function render() { 
    window.requestAnimationFrame(render); 
} 

window.requestAnimationFrame(render); 

당신은 전화의 "무한"양을 얻을 수 없다, 하드웨어가 얼마나 강한에 따라 달라집니다 : 당신이 원하는 무엇

+6

['requestAnimationFrame'] (https://developer.mozilla.org/en/US/docs/Web/API/window/requestAnimationFrame)을 시도해보십시오. 그러나 이미 * 500 * fps를 얻으려면 왜 더 많은 것을 필요로합니까? –

+0

@ Lucas Trzesniewski : 답으로 다시 게시해야합니다. – doctorless

+1

@Dheheart 누군가 누군가 이미 FGITWed했다. 그러나 정직하게 말하면 나는 OP의 500fps 수치에 대해 매우 모호하다.) –

답변

3

window.requestAnimationFrame이 방법을 사용합니다. 또한 하드웨어가 무엇이든 관계없이 모든 사용자가 게임 애니메이션을 부드럽게 만들 수 있도록 "델타 시간"(두 번의 연속 된 render 호출 사이에 경과 된 시간)을 쉽게 계산할 수 있습니다.

+0

'render' 함수를 실행하는 데 필요한 시간을 계산함으로써 내가 사용하는 것이 무엇이든 (requestAnimationFrame, setInterval) 한 번에 5000 번씩 함수를 실행할 수 없음을 알 수 있습니다. 그러나 그것이 가능해야한다, 나는 그것이 효과가없는 이유를 이해하지 않는다. 'window.requestAnimationFrame' 방법의 경우, 최대 60fps를 설정하지만 "델타 시간"을 줄일 수는 없습니다. 내가 테스트 한 여러 가지 방법의 델타 시간을 측정하여 내일 여기에 보고서를 게시하려고합니다. – ClementNerma

+0

몇 가지 테스트를 거친 후 델타 시간은 간단한 'setTimeout' (즉, 내 질문을 수정 한'setInterval'이 아닌)보다'requestAnimationFrame'으로 약 2 배 더 높습니다 (이상하게). 그리고 4000 폴리곤을 화면에 놓으면 FPS는'setTimeout' 방식으로 약 2 배 더 ..... – ClementNerma