2013-04-04 4 views
0

в основном я написал функцию:вызова функции внутри SetTimeout и внутри функции

 
function animation(){ 
    setTimeout(
     function(){ 
     requestAnimationFrame(animation); 
     if (player.currentFrame == player.frames) { 
      player.currentFrame = 0; 
      } else { 
      player.currentFrame++; 
      } 
     } 
    , 1000/15); 
} 

и я пытаюсь вызвать его с этим кодом animation(fps);

Я попытался сделать это следующим образом:

 
function animation(fps){ 
    setTimeout(
     function(){ 
     requestAnimationFrame(animation); 
     if (player.currentFrame == player.frames) { 
      player.currentFrame = 0; 
      } else { 
      player.currentFrame++; 
      } 
     } 
    , 1000/fps); 
} 

и попытался вызвать его с animation(30) , но это не сработало. Я пробовал поисковую тему вроде этого, но не из них - это то, чего я хочу.

Любая помощь будет оценена! :)

ответ

0

setTimeout будет вызывать функцию только один раз по прошествии времени, поэтому, если вы не позвоните animation с fps, он просто запустится один раз и будет выполнен. Вы можете использовать setInterval для вызова функции каждые 1000/fps миллисекунд.

var frame = 0; 
animation(20); 
function animation(fps){ 
    console.log(fps) 
    setInterval(
     function(){ 
      console.log("A"); 
      document.getElementById("sp1").innerHTML = frame; 
      frame++; 
     } 
    , 1000/fps); 
} 

Образец скрипку: http://jsfiddle.net/Up4Cq/

Или, если вы хотите использовать SetTimeout, необходимо вызвать функцию animation снова:

function animation(fps){ 
    console.log(fps) 
    setTimeout(
     function(){ 
      console.log("A"); 
      document.getElementById("sp1").innerHTML = frame; 
      frame++; 
      animation(fps); 
     } 
    , 1000/fps); 
} 

Вот скрипка для SetTimeout: http://jsfiddle.net/Up4Cq/1/

+0

да, я уверен, что я хочу SetTimeout, работает ли он SetTimeout тоже: /? – Nucleus

0

Вы попробовали этот синтаксис

function animation(fbs){ 
     requestAnimationFrame(animation); 
     if (player.currentFrame == player.frames) { 
      player.currentFrame = 0; 
     } else { 
      player.currentFrame++; 
     }   
     setTimeout(function(){animation(fbs) }, 1000/fbs); 
} 

Я изменил код с setTimeout('animation(fbs)', 1000/fbs); на setTimeout(function(){animation(fbs) }, 1000/fbs);

+0

Вы не должны использовать строку внутри setTimeout ... –

+0

Я просто попробовал, чтобы это не сработало:/ – Nucleus

+0

@JeffShaver: why? , Я использовал его раньше и отлично работал со мной до сих пор –

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