2015-07-02 2 views
0

Я разрабатываю игру, и у меня возникают проблемы. Я хотел бы иметь funtion wait(frames), который заставит функцию ждать некоторых кадров перед продолжением.Javascript: Подождите несколько кадров перед продолжением функции

У меня есть основной цикл, как это:

setInterval(function() { 
    refreshMap(); 
}, 35); 

И такую ​​функцию, что:

function sayHello(){ 
    console.log("hello 1"); 
    wait(5); 
    console.log("hello 2"); 
} 

wait(5) функция будет сделать игру обновления 5 раз перед выполнением console.log("hello 2");. Можно ли обойтись без замораживания всей игры, как setTimeout()?

+0

Проблемы с JS является то, что бы вы ни делали в коде Javascript может выполнить код только в одном потоке. Подумайте об использовании чего-то вроде java-апплета или .Net SignalR – Fabjan

+2

_ «Можно ли обойти всю игру, как' setTimeout() '? _ _, - неясно, что вы подразумеваете под этим; на самом деле использование тайм-аута - один из способов «не замораживать» что-либо. – CBroe

ответ

0

Я не вижу, как взаимодействуют ваши первая и вторая функции. Но что-то, как это будет сделать игру ждать в течение 10 секунд без замораживания игры:

setInterval(refreshMap,35); 
sayHello(); 

function sayHello(timeToContinue) 
{ 
    if (!timeToContinue) //the first time it's called 
    { 
     console.log("hello 1"); 
     var nextTime = new Date(); 
     nextTime.setSeconds(nextTime.getSeconds() + 10); 
     window.setTimeout(function(){sayHello(nextTime);}), 1); //call this function again 
     return; 
    } 
    if (new Date() < timeToContinue) //when next the function gets here check 10 seconds have passed 
    { 
     window.setTimeout(function(){sayHello(timeToContinue);}), 1); //else come back later 
     return; 
    } 
    console.log("hello 2"); 
} 
Смежные вопросы