Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Секреты разработки игр в Macromedia Flash MX - Макар Дж.

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 148 149 150 151 152 153 < 154 > 155 156 157 158 159 160 .. 210 >> Следующая

времени. Пройдет около 1 минуты, прежде чем на компьютере Эстель
остановятся катящиеся шары. Если ориентироваться на компьютер Фрэнка,
после первых 30 секунд по-прежнему его очередь ходить и шары прекратили
качение, так что он делает следующий удар. Вы видите проблему? Фрэнк лишь
пытается сделать удар, прежде чем шары остановятся на компьютере Эстель.
Если мы позволим этому случиться, то многопользовательская игра
прекратится на этом месте. Во время удара Фрэнка (30 секунд после
остановки) лишь один экран - Фрэнка - показывает правильное положение
шаров. Если он ожидал целую минуту, то компьютер Эстель догнал бы его и
оба экрана показывали бы правильное положение шаров.
Только что описанная мной проблема синхронизации является ночным кошмаром
для программиста игры. Я описал ситуацию, используя два компьютера с
сильно отличающейся скоростью вычислений, чтобы выявить несоответствие.
Более вероятно, что два компьютера будут довольно сходны по
характеристикам, но будет все же несколько секунд, в течение которых
экраны не будут полностью синхронны. Например, предположим, оба игрока
имеют поразительно быстрые компьютеры, но у Фрэнка открыто три окна с
Интернет-приложениямн плюс Adobe Photoshop и Macromedia FreeHand. Его
фантастический компьютер будет обрабатывать информацию немного медленнее,
чем компьютер Эстель, и он будет отставать.
Говорят, что оценка равна 20/20, и я верю этому. Я не знаю, как я не
сталкивался с этой проблемой так долго...но это факт. Вы столкнетесь с
ней при создании походовых многопользовательских игр или в таких играх,
где анимация или некоторые другие временные факторы играют существенную
роль. В играх
Глава 18. Девять шаров
457
ироде крестиков-ноликов, шашкек, шахмат мы не заметили бы этой проблемы.
Теперь, когда вы поняли, что проблема существует, и прежде, чем вы
позволите затянуть вас вниз, давайте поговорим о решении. Решение состоит
в том, чтобы не позволять игроку двигаться, пока оба игрока не готовы. Мы
делаем это очень простым способом. Как вы, возможно, помните из гл. 17,
посвященной крести-кам-ноликам, мы устанавливаем переменные комнаты,
чтобы помочь себе определить, когда пользователь находится в игровой
комнате или не покинул ли он ее. Мы можем также использовать переменные
комнаты для хранения статуса окна каждого пользователя. (Под "окном" я
подразумеваю один экземпляр пользователя во всей игре.) Например, когда
экран игрока 1 готов к отправке или получению хода, мы устанавливаем
переменную комнаты с именем playerl stopped is значение "yes". Когда
экран Игрока готов к посылке или получению хода, мы станавливаем
переменную комнаты player2stopped в значение "yes". Как только игрок
посылает или получает информацию об ударе, его игра автоматически
устанавливает серверную переменную playerl stopped или player2stopped в
значение "по".
Помните, что всякий раз, когда переменная комнаты создана, изменена или
удалена, это вызывает выполнение события onRoomVarChange. Когда это
событие вызывается, объект, который содержит все переменные комнаты,
передается в него. Мы проверяем значения playerl stopped и player2stopped
в этом объекте. Если они оба имеют значение "yes", то мы находимся в
ситуации, когда можем позволить ходить другому.
Многопользовательские действия
Если вы еще не открыли pool.fla, сделайте это сейчас. Этот файл игры
идентичен такому-же из крестиков-ноликов, за исключением содержимого
кадра Game в главной шкале времени. Щелкните на этом кадре сейчас, в слое
Actions. Код ActionScript в этом кадре, который используется для
обработки общения, такой же точно, как в окне чата в крестиках-ноликах.
Двойным кликом на клипе в этом кадре войдите в него. Вы увидите в этом
клипе три слоя: Multiplayer Actions, Actions и Assets. Слой Assets
содержит всю графику и клипы, которые необходимы в игре. Слой Actions
содержит код ActionScript, используемый для всех целей в этой игре,
исключая передачу данных от игрока к игроку (например, посылку и
получение ходов). Кадр Multiplayer Actions содержит весь код
ActionScript, необходимый для посылки
158
Часть 2. Исследование основ
1 получения ходов; создания, изменения и получения переменных комнаты 1
для инициализации игры. Код в этом кадре мы будем рассматривать сейчас,
аольшая часть этого кода будет освещена кратко, поскольку он сходен с тем
кошм, что использовался в игре крестики-нолики.
Ниже представлен код ActionScript, который находится в нижней части этого
садра.
1 Е S =ElectroServer;
2 player =ES.player;
3 initializedYet =false;
4 ES . onRoomVarChange =roomVarChanged;
5 ES.moveReceived =moveReceived;
6 ES.joinGamef);
7 createVar("player"+player,"here");
3 строке 1 мы просто создаем псевдоним для ElectroServer на экземпляр
объекта! ElectroServerAS. Это сделано скорее из лени (проще напечатать
ES, чем напечатать ElectroServer!). Далее мы устанавливаем переменную с
именем playeij щя хранения вашего номера игрока. Если вы являетесь
Предыдущая << 1 .. 148 149 150 151 152 153 < 154 > 155 156 157 158 159 160 .. 210 >> Следующая