2017-04-09 4 views
-2

저는이 튜토리얼을 사용하여 저의 배정을위한 간단한 JS 게임을 작성하는 데 도움을 줬습니다. 그러나 나는 지금 gameloop을보고 있으며이 특정 기능이 어떻게 작동하는지 전혀 모른다.date.now() '는'여기서 무엇을합니까? - 자바 스크립트

다음은이 자습서의 URL입니다. "

: 또한

// Let's play this game! 
var then = Date.now(); 
reset(); 
main(); 

다음 설명 : 당신이 찾고있는 코드의 블록은 8"주요 게임 루프 " http://www.lostdecadegames.com/how-to-make-a-simple-html5-canvas-game/

//Gameloop 
var main = function() { 
    //var with timestamp 
    var now = Date.now(); 

    //where does 'then' come from? I never declared it. 
    var delta = now - then; 

    //next up it just calls another func and provides parameter delta divided by 1000 which is the amount of miliseconds in a second 
    update(delta/1000); 
    //and it calls my render function 
    render(); 

    //then it sets then back to Date.now() 
    then = now; 

    //No idea what this line does. still looking into it 
    requestAnimationFrame(main); 
}; 
+0

일부 예제 소스 코드에서 선언을 찾으려고했기 때문에이 질문을 주제로 끝내기로했습니다. – rlemon

+0

'then'은 의심 할 여지없이 - 마스터 클로저의 계층 구조의 상위 범위에서 선언됩니다 . 표현 함수 변수 'main'은 호출 사이의 시간 간격을 (의심 할 여지없이) 업데이트하고 해당 프레임을 렌더링하는 데 사용됩니다. '다음'을'now'로 업데이트하여 같은 표현식 (main)을 호출하는 후속 'requestAnimationFrame'을 위해 준비하고, 새로운 업데이트와 델타 계산을합니다. –

답변

0

나는이 튜토리얼의 코드에서 내가 이해 한 것을 설명하려고 노력할 것이다.
게임은 종종 초당 60 프레임 (FPS)과 같이 고정 된 프레임 속도로 실행됩니다.
튜토리얼에서는 그렇지 않습니다. update 함수에서 고정 된 프레임 속도를 유지하고 고정 된 거리로 문자를 이동하는 대신 델타 변수를 사용하여 거리를 계산합니다. 다른 답변 추천

hero.y -= hero.speed * modifier; // modifier is (delta/1000) 

then 메인 함수의 외측 영역에서는, 처음에 설정되어있다.

// Let's play this game! 
var then = Date.now(); 
reset(); 
main(); 

자습서가 약간 오래된 것 (2011)이며 몇 가지 세부 정보가 향상 될 수 있다고 덧붙입니다. 예를 들어 lighthouse에보고 된 Date.now() 대신 performance.now()을 사용할 수 있습니다.

0

읽기 시작 게임에서 번호 10 거의 대부분이 코드 스 니펫입니다! 먼저 변수를 사용하여 타임 스탬프를 설정하고 다시 시드하여 새 게임/레벨을 시작합니다. "

+0

질문하기 전에 친절히 읽으십시오 – yass

+0

건배! 완전히 함수를 호출하기 전에 선언 된 것을 놓쳤다. – Melvin

0

잘 읽지 못했습니다. 선언을 찾았습니다. 감사!

관련 문제