2012-05-24 5 views
-2

Перемещение массива содержит всего пару шагов. Я хочу нарисовать на холсте. в основном, deltaTime для сна и команды рисования.Функция спящего режима javascript с изменяющимися параметрами

Это просто не работает :(

for (var i=0; i< parsed.moves.length; i++) 
{ 
    var e = parsed.moves[i]; 
    setTimeout(function(){drawCmd(context,e)}, e.deltaTime*1000); 

    //deltaTime are values btn 0-1, the sleep time i need to set btw commands 

} 


function drawCmd(canvasctx, e) 
{ 

switch(e.type) 
{ 
    //case ... 
} 
} 

он не сделал вообще ничего, даже не вызвав функцию drawCmd

+0

Где ты Devine 'значение deltaTime'? Покажите нам еще один код. – antyrat

+0

Это 'e' или' drawCmd'. Вы, вероятно, используете их неправильно. – gdoron

+0

Что говорит консоль? – Joseph

ответ

1

Вы только код задерживает все drawCmd по e.deltaTime*1000 и выполняет их все сразу после , все в i = 10

Если вы имели в виду, чтобы «рисовать и ждать, рисовать и ждать», попробуйте следующее:

(function loop(i){ 
    var e = parsed.moves[i];  //e at current "i" 

    if(i< parsed.moves.length){ //if not equal to length 
     setTimeout(function(){ 
      drawCmd(context,e); //draw in e.deltaTime*1000 milliseconds 
      loop(++i);   //loop again 
     }, e.deltaTime*1000); 
    } 

}(0));       //start with i=0 
+0

ur my god @Joseph the Dreamer – Liduo

0

Вы, вероятно, хотите, чтобы проверить тип данных DeltaTime

setTimeout(function() { }, undefined * 1000); // <- Executes imidiately 
    setTimeout(function() { }, '1' * 1000); // <- Executes after 1 second 
    setTimeout(function() { }, 1 * 1000); // <- Executes after 1 second 
    setTimeout(function() { }, new Date() * 1000); // <- Executes after a long (i.e. 1337852997592 seconds) time 
+0

NB - Все ваши инструкции тайм-аута будут добавлены в очередь, начнет обрабатываться ** после ** эта функция выйдет. setTimeout не является блокирующим вызовом. – cmilhench

Смежные вопросы