2013-08-19 4 views
0
var fps = 30; 
var drawInterval; 

imageSprite.addEventListener('load',init,false); 

function init() { 
    drawBg(); 
    startDrawing(); 
} 

function draw() {   
    clearJet(); 
    drawJet(); 
} 

function startDrawing() { 
    stopDrawing(); 
    drawInterval = setInterval(draw,1000/fps); 
} 

function stopDrawing() { 
    clearInterval(drawInterval); 
} 

Может кто-нибудь объяснить, почему мы выполняем функцию stopDrawing() перед drawInetrval и как этот код будет выполнен.SetInterval и clearInterval описание

ответ

1

По существу с clearInternal вы останавливаете интервал, на который ссылается drawInterval.

Вы можете посмотреть на него, как если бы он установил drawInterval = null.

Это сделано, чтобы предотвратить несколько интервалов стрельбы: каждый раз, когда startDrawing называется, вы сбросить текущий постоянный интервал и начать новый, который будет срабатывать в 1000/FPS миллисекунд, то есть drawInterval будет срабатывать 1000/fps миллисекунды после startDrawing вызывается для последнее время.

+0

означает, что функция 'startDrawing()' вызывается несколько раз или что refrence запускает 'setInterval (draw, 1000/fps)' несколько раз? и если именно поэтому мы используем функцию «stopDrawing()», а не после того, как этот интервал был запущен. – Unknown5566

+0

'startDrawing' вызывается каждый раз, когда' imageSprite' заканчивает загрузку своего содержимого. если вы вызываете 'stopDrawing' после запуска интервала, вы просто прекратите его немедленно - это не то, что вы хотите. вызывая 'stopDrawing' до фактического начала интервала, означает, что если интервал уже был запущен, он останавливается, а новый запускается после миллисекунд 1000/fps (и поскольку он является интервалом, он будет непрерывно запускать каждый' 1000/fps' Миз. – fusio

0

Это просто очистка интервала так, чтобы вы не запускали несколько интервалов одновременно.