2014-11-03 4 views
1

나는 Eloquent Javascript를 사용해 일하고있다. 저는 15 장 "플랫폼 게임"의 마지막에 있습니다. 게임을 일시 중지하는 방법을 알아내는 데 어려움을 겪고 있습니다. 이 장의 끝에있는 연습의이 함수를 올바르게 호출하려면 어떻게해야합니까?

하나는이 작업을 수행하도록 요청 : 는 "가능 일시 정지 (일시 정지) 및 Esc 키를 눌러 게임을 일시 중지를 해제 할 수 있도록

이이 변화하여 수행 할 수 있습니다. runLevel 함수는 다른 키보드 이벤트 핸들러를 사용하고 Esc 키를 누를 때마다 애니메이션을 중단하거나 다시 시작합니다. " 저자는 runLevel이 runAnimation을 호출하는 방법을 재정렬하여이를 수행 할 수 있다고 말합니다.

function runLevel(level, Display, andThen) { 
    var display = new Display(document.body, level); 
    runAnimation(function(step) { 
     level.animate(step, arrows); 
     display.drawFrame(step); 
     if (level.isFinished()) { 
     display.clear(); 
     if (andThen) 
      andThen(level.status); 
     return false; 
     } 
    }); 
    } 

내가 이렇게 기능을 수정 : 여기 는 언급 된 기능입니다

function runLevel(level, Display, andThen) { 
    var display = new Display(document.body, level); 
    var paused = false; 

    addEventListener("keydown", function(event){ 
     if (event.keyCode == 27) { 
      paused = !paused; 
     } 
    }); 

    if (!paused){ 
     runAnimation(function(step) { 
      level.animate(step, arrows); 
      display.drawFrame(step); 
      if (level.isFinished()) { 
      display.clear(); 
      if (andThen) 
       andThen(level.status); 
      return false; 
      } 
     }); 
    } 

    } 

그러나 게임은 내가 탈출 충돌 후에도 계속 플레이하기를 계속한다. 나는 왜 그런지 이해하지 못한다.
게임의 전체 코드는 여기에서 확인할 수 있습니다. http://eloquentjavascript.net/code/chapter/15_game.js 미리 도움을 청하십시오!

+4

힌트 : 'runLevel' 함수가 호출 된 횟수 및 횟수? – zerkms

답변

1

if 문을 콜백 함수 안에 넣으십시오.

runAnimation(function(step) { 
    if (!paused){ 
     level.animate(step, arrows); 
     display.drawFrame(step); 
     if (level.isFinished()) { 
     display.clear(); 
     if (andThen) 
      andThen(level.status); 
     return false; 
     } 
    } 
    }); 
관련 문제