Более вероятно, что два компьютера будут довольно сходны по характеристикам, но будет все же несколько секунд, в течение которых экраны не будут полностью синхронны. Например, предположим, оба игрока имеют поразительно быстрые компьютеры, но у Фрэнка открыто три окна с Интернет-приложениями, плюс Adobe Photoshop и Macromedia FreeHand. Его фантастический компьютер будет обрабатывать информацию немного медленнее, чем компьютер Эстель и он будет отставать.
Говорят, что оценка равна 20/20 и я верю этому. Я не знаю, как я не сталкивался с этой проблемой так долго…, но я делал это. Вы столкнетесь с ней при создании по-ходовых многопользовательских игр или игре в такие игры, если анимация или некоторые другие временные факторы играют в них существенную роль. В играх вроде крестики-нолики, шашки, шахматы, мы не заметили бы этой проблемы. Теперь, когда вы поняли, что проблема существует, и прежде чем вы позволите затянуть вас вниз, давайте поговорим о решении. Решение состоит в том, чтобы не позволять игроку двигаться, пока оба игрока не готовы. Мы делаем это очень простым способом. Как вы, возможно, помните из главы, посвященной крестикам-ноликам, мы устанавливаем переменные комнаты, чтобы помочь себе определить, когда пользователь находится в игровой комнате или не покинул ли он ее. Мы можем также использовать переменные комнаты для хранения статуса окна каждого пользователя. (Под «окном» я подразумеваю один экземпляр пользователя во всей игре.) Например, когда экран Игрока 1 готов к отправке или получению хода, мы устанавливаем переменную комнаты с именем player1stopped в значение «yes». Когда экран Игрока готов к посылке или получению хода, мы устанавливаем переменную комнаты player2stopped в значение «yes». Как только игрок посылает или получает информацию об ударе, его игра автоматически устанавливает серверную переменную player1stopped или player2stopped в значение «no».
Помните, что всякий раз, когда переменная комнаты создана, изменена или удалена, это вызывает выполнение события onRoomVarChange