разделение на потоки или другой вид параллельной
обработки, чтобы игра могла обрабатывать данные
и в то же время продолжать игровой процесс.
А поскольку игрок, скорее всего, взаимодейству-
ет с тем же состоянием, которое вы обрабатыва ете,
вам надо подумать о том, как сделать параллель-
ную обработку безопасной.
Для обозначения мо-
мента задержки между
пользовательским вво-
дом и реакцией на него
используется термин
гистерезис
.
386
Грязный флаг (Dirty Flag) —
Паттерны программирования игр
Насколько точное ваше отслеживание грязных
флагов?
Допустим, ваша пиратская игра позволяет игрокам самим
создавать и настраивать их пиратский корабль. Кораб-
ли автоматически сохраняются онлайн, и потому всегда
можно продолжить с того места, где он остановился в про-
шлый раз. Мы используем грязные флаги, чтобы опреде-
лить, какая палуба судна была изменена и требует отправ-
ки на сервер. Каждый фрагмент данных, отправляемых
на сервер, содержит данные об изменении корабля и не-
много метаданных, где именно корабль был изменен.
• Более точное
Вы отслеживаете даже крошечные изменения на каж-
дой из палуб.
• Вы обрабатываете только данные, которые изме-
нились
. Вы будете отсылать на сервер только изме-
нившуюся часть состояния корабля.
• Менее детализированное
Как альтернатива, мы можете ассоциировать каждый
грязный флаг со всей палубой. Изменение чего угод-
но на палубе сделает грязной всю палубу.
• В итоге вы обрабатываете неизмененные данные
.
Добавьте одну бочку на борт, а отправлять на сер-
вер придется всю палубу.
• Меньше памяти нужно для хранения грязных фла-
гов
. Добавьте 10 бочек, а на отслеживание измене-
ний понадобится всего один бит.
• Меньше времени уходит на накладные расходы
. Что-
бы дойти до обработки самих данных, вам все рав-
но приходится выполнять подготовительную рабо-
ту. В данном примере это метаданные, нужные для
определения места на корабле, где именно произо-
шли изменения. Чем больше фрагменты обрабаты-
ваемых данных, тем меньше их количество, а зна-
чит, меньше накладных расходов.
Я мог бы тут пошутить
о ведре и швабре,
но лучше не буду.
Смотрите также
• Этот паттерн типичен не только для игр, но и для
браузерных фреймворков вроде Angular. С помо-
щью грязного флага отслеживают изменивши
е-
ся данные и принимают решение об отправке их
на сервер.
• Физические движки отслеживают, какие объек-
ты находятся в движении, а какие нет. А посколь-
ку не движущийся объект будет находиться в со-
стоянии покоя, пока ему не передадут импульс, его
можно не обрабатывать, пока его не трогают. Этот
бит «находится в движении» — грязный флаг, отме-
чающий объекты, к которым была приложена сила,
и теперь для них надо проводить вычисления.
Do'stlaringiz bilan baham: |