PDA

Просмотр полной версии : Какой операцией можно остановить действие функции?


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!). И у них окошко может появиться на каких-то пару секунд и они не успеют нажать ПЕРЕЗАПУСК, чтобы играть в ОБНОВЛЁННУЮ версию, и поэтому продолжат играть в старую.

Вот сам вопрос:
Как можно сделать остановку выполнения функции, чтобы ВСЕ игроки, играющие в ДАННЫЙ МОМЕНТ успели нажать на ПЕРЕЗАПУСК?

dark256
10.06.2011, 10:27
какого рода у вас обновления???
Перезалили файлы?
Поддерживайте в БД свой upd для КАЖДОГО юзера.

EndoCrinologist
12.06.2011, 02:48
пользователь играет в swf-файле.. я доработал игру, удалил старый swf, залил новый.. но пользователь страницу не перезагружал, поэтому он еще играет в старую версию.. я активирую "окошко" и пока пользователь не перезагрузится, оно не уберется... просто это будет проблематично осуществить для КАЖДОГО пользователя... мне надо чтобы функция lvOnLoad остановилась до тех пор, пока пользователь не нажмет кнопку ПЕРЕЗАПУСК..