EndoCrinologist
10.06.2011, 09:37
Вот есть функция, проверяющая обновление на сайте:
_root.restart._visible = 0; // restart - это мувик с окошком, предупреждающий о том, что игра претерпела обновление и поэтому страницу с игрой необходимо перезагрузить
function Update():Void{ //сама функция обновления
_urls = _root.urls + "update.upd"; //адрес файла, в котором написана строка "upd=1" (это означает то, что игра обновилась) ИЛИ "upd=0" (это означает, что игра пока не претерпевала никаких изменений)
var lv:LoadVars = new LoadVars()
lv.onLoad = lvOnLoad;
lv.load(_urls);
function lvOnLoad (suc:Boolean) {
if(suc){ //если загрузка данных была успешна
//this ссылается на экземпляр LoadVars, который получает переменные из файла
upd = parseFloat(this.upd); //получаю значение параметра upd
if (upd == 1){ // если обновления ЕСТЬ
_root.restart._visible = 1; //показываю мувик с окошком, в котором предупреждение, что игру необходимо перезагрузить
} else { // если обновлений НЕ НАБЛЮДАЛОСЬ
_root.restart._visible = 0; // окошко, естественно, не показывать
}
}
}
}
var upr = setInterval(Update,2000); //повторять операцию проверки каждые 2 секунды
Эта функция повторяется каждые 2 секунды, так как, например, я в это время игру дорабатывал и затем с помощью кнопки в этой же игре отправил данные на сервер. Эти данные обработались и записали в тот самый файл "update.upd" значение "upd" равное 1. При этом, так как У ВСЕХ игроков идет проверка на сервер каждые 2 секунды, то после того, как функция обнаружила то, что "upd=1", а не 0, то она показывает окошко с предупреждением.
Проблема заключается в следующем:
В этом же окошке есть кнопка ПЕРЕЗАПУСК, которая одновременно отправляет данные на сервер (которые изменяют в файле update.upd значение upd с единицы на нуль) и перезагружает страницу.
Но ведь если КТО-ТО ОДИН из играющих нажмет на неё, то автоматически у ОСТАЛЬНЫХ игроков уберется окошко (ведь они же всё сверяют с одним файлом "update.upd", в котором стало значение не 1, а 0!). И у них окошко может появиться на каких-то пару секунд и они не успеют нажать ПЕРЕЗАПУСК, чтобы играть в ОБНОВЛЁННУЮ версию, и поэтому продолжат играть в старую.
Вот сам вопрос:
Как можно сделать остановку выполнения функции, чтобы ВСЕ игроки, играющие в ДАННЫЙ МОМЕНТ успели нажать на ПЕРЕЗАПУСК?
_root.restart._visible = 0; // restart - это мувик с окошком, предупреждающий о том, что игра претерпела обновление и поэтому страницу с игрой необходимо перезагрузить
function Update():Void{ //сама функция обновления
_urls = _root.urls + "update.upd"; //адрес файла, в котором написана строка "upd=1" (это означает то, что игра обновилась) ИЛИ "upd=0" (это означает, что игра пока не претерпевала никаких изменений)
var lv:LoadVars = new LoadVars()
lv.onLoad = lvOnLoad;
lv.load(_urls);
function lvOnLoad (suc:Boolean) {
if(suc){ //если загрузка данных была успешна
//this ссылается на экземпляр LoadVars, который получает переменные из файла
upd = parseFloat(this.upd); //получаю значение параметра upd
if (upd == 1){ // если обновления ЕСТЬ
_root.restart._visible = 1; //показываю мувик с окошком, в котором предупреждение, что игру необходимо перезагрузить
} else { // если обновлений НЕ НАБЛЮДАЛОСЬ
_root.restart._visible = 0; // окошко, естественно, не показывать
}
}
}
}
var upr = setInterval(Update,2000); //повторять операцию проверки каждые 2 секунды
Эта функция повторяется каждые 2 секунды, так как, например, я в это время игру дорабатывал и затем с помощью кнопки в этой же игре отправил данные на сервер. Эти данные обработались и записали в тот самый файл "update.upd" значение "upd" равное 1. При этом, так как У ВСЕХ игроков идет проверка на сервер каждые 2 секунды, то после того, как функция обнаружила то, что "upd=1", а не 0, то она показывает окошко с предупреждением.
Проблема заключается в следующем:
В этом же окошке есть кнопка ПЕРЕЗАПУСК, которая одновременно отправляет данные на сервер (которые изменяют в файле update.upd значение upd с единицы на нуль) и перезагружает страницу.
Но ведь если КТО-ТО ОДИН из играющих нажмет на неё, то автоматически у ОСТАЛЬНЫХ игроков уберется окошко (ведь они же всё сверяют с одним файлом "update.upd", в котором стало значение не 1, а 0!). И у них окошко может появиться на каких-то пару секунд и они не успеют нажать ПЕРЕЗАПУСК, чтобы играть в ОБНОВЛЁННУЮ версию, и поэтому продолжат играть в старую.
Вот сам вопрос:
Как можно сделать остановку выполнения функции, чтобы ВСЕ игроки, играющие в ДАННЫЙ МОМЕНТ успели нажать на ПЕРЕЗАПУСК?