2013-05-14 1 views
10

Как приостановить анимацию холста с помощью requestAnimationFrame? я начинаю анимацию, как это:Canvas requestAnimationFrame pause

Код:

window.requestAnimFrame = (function() { 
    return window.requestAnimationFrame  || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      function(callback) { 
       window.setTimeout(callback, 1000/60); 
      }; 
})(); 

function Start() { 
    Update(); 
    requestAnimFrame(Start); 
} 

Start(); 

Теперь я хочу, чтобы добавить опцию паузы после KeyDown. Есть ли простой способ сделать это?

+2

Решение Ivan Chub работает, но браузер продолжит вызов обратного вызова requestAnimationFrame. Чтобы избежать такого поведения, используйте [cancelAnimationFrame] (https://developer.mozilla.org/en-US/docs/DOM/window.cancelAnimationFrame). Рассмотрим, пожалуйста, опубликованный многопрофильный запрос requestAnimationFrame [в этой статье] (http://paulirish.com/2011/requestanimationframe-for-smart-animating/). –

+0

Не нужно ли 'requestAnimationFrame' вызывать в' Update() '? В противном случае вы вызываете функцию, которая ничего не делает, кроме вызова другой функции. –

ответ

8

Что вы можете сделать, это создать переменную, в которой хранится состояние вашей анимации: приостановлено или приостановлено. Меняйте это состояние каждый раз, когда вы нажимаете кнопку. Что-то вроде этого должно работать:

var isPaused = false; 

window.requestAnimFrame = (function() { 
    return window.requestAnimationFrame  || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      function(callback) { 
       window.setTimeout(callback, 1000/60); 
      }; 
})(); 

function Start() { 
    if (isPaused) { 
     Update(); 
    } 

    requestAnimFrame(Start); 
} 

window.onkeydown = function() { 
    isPaused = !isPaused; // flips the pause state 
}; 

Start();