Спасибо, что нашли время помочь мне.
Я пишу игру, в которой анимированный значок поезда движется по заданному пути к пункту назначения, останавливаясь на путевых точках по пути. Это сделано для того, чтобы создать впечатление анимации.
Игра закодирована в Facebook Javascript. Мне нужно найти способ заставить иконку поезда остановиться на 1 секунду, прежде чем перейти к следующей точке маршрута. Я надеялся найти функцию, которая позволила бы мне приостановить выполнение скрипта на одну секунду, но ничего подобного в JS не существует. Поэтому я попробовал setTimeout, но моя основная проблема с этим двоякая:
Мне нужно передать массив в функцию обратного вызова в качестве аргумента, и я не могу понять, как заставить setTimeout сделать это.
Мне наконец удалось использовать setTimeout для выполнения моего кода анимации поезда для 5 путевых точек (я преодолел проблему в 1 с помощью глобальных переменных). К сожалению, похоже, что все пять вызовов setTimeout были поставлены в очередь почти одновременно, что привело к тому, что первый setTimeout сработал одну секунду, а затем все они одновременно сработали, разрушив иллюзию анимации поезда.
Я боролся с этой проблемой в течение шести часов подряд. Было бы замечательно, если бы кто-то мог помочь мне найти решение. Спасибо!
Вот код:
function myEventMoveTrainManual(evt, performErrorCheck) {
if(mutexMoveTrainManual == 'CONTINUE') {
var ajax = new Ajax();
var param = {};
if(evt) {
var cityId = evt.target.getParentNode().getId();
var param = { "city_id": cityId };
}
ajax.responseType = Ajax.JSON;
ajax.ondone = function(data) {
var actionPrompt = document.getElementById('action-prompt');
actionPrompt.setInnerXHTML('<span><div id="action-text">'+
'Train en route to final destination...</div></span>');
for(var i = 0; i < data.length; i++) {
statusFinalDest = data[i]['status_final_dest'];
//pause(1000);
gData = data[i];
setTimeout(function(){drawTrackTimeout()},1000);
if(data[i]['code'] == 'UNLOAD_CARGO' && statusFinalDest == 'ARRIVED') {
unloadCargo();
} else if (data[i]['code'] == 'MOVE_TRAIN_AUTO' || data[i]['code'] == 'TURN_END') {
//moveTrainAuto();
} else {
// handle error
}
mutexMoveTrainManual = 'CONTINUE';
}
}
ajax.post(baseURL + '/turn/move-train-final-dest', param);
}
}
function drawTrackTimeout() {
var trains = [];
trains[0] = gData['train'];
removeTrain(trains);
drawTrack(gData['y1'], gData['x1'], gData['y2'], gData['x2'], '#FF0', trains);
gData = null;
}