Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Какой операцией можно остановить действие функции? (http://www.flasher.ru/forum/showthread.php?t=157753)

EndoCrinologist 10.06.2011 09:37

Какой операцией можно остановить действие функции?
 
Вот есть функция, проверяющая обновление на сайте:

Код AS1/AS2:

_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 остановилась до тех пор, пока пользователь не нажмет кнопку ПЕРЕЗАПУСК..


Часовой пояс GMT +4, время: 12:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.