Показать сообщение отдельно
  #4 (permalink)  
Старый 20.03.2015, 15:03
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 181

Aetae, какая хитропопая трактовка))))))))))) Я о таком варианте не думал как-то...
Тогда примерно так:
nowIteration = 0;
iterationLimit = 5;
timeLimit = 10;
historyTimes = {};
for (var i = 0; i < iterationLimit; ++i) {
	historyTimes[i] = (new Date()).getTime();
}
function game(){
	var t = (new Date()).getTime();
	/*Следующая итерация является самой старой по отношению к текущей, поэтому сравниваем с ее временем*/
	nextIteration = nowIteration + 1;
	nextIteration >= iterationLimit && (nextIteration = 0);
	if (t - historyTimes[nextIteration] > timeLimit) {
		historyTimes[nowIteration] = t;
		nowIteration = nextIteration;
		
		/*Основной код процедуры*/
	}
}

Храним историю необходимого количества операций. При каждой попытке вызова требуемой функции сравниваем текущее время с самой ранней из всех записей в данной истории, индекс которой на единицу больше текущей итерации.
Если в первом случае временные отрезки исчислялись последовательно без наложения и действительно возникала та ситуация, которую ты описал, то во втором примере подобного уже не должно быть.
Ответить с цитированием