Попробую высказать свой взгляд на причину фризовСообщение от Buka
![]()
Это, конечно, можно объяснить, но только при знании архитектуры программы. Могу предположить, что отрисовка картинки синхронизирована с обработкой сообщений от сервера, поскольку информация, которая приходит с сервера, может повлиять на содержание сцены. Так что, если изменения в сцене значительные, например массовые взрывы наземки ( не по твоей вине) или одновременное открытие огня зенитной артилерией нескольких кораблей, то ничего не будет рисоваться у тебя до тех пор, пока изменения не будут внесены в сцену. С другой стороны, намного выгоднее пересылать одним пакетом (сетевым) как можно больше таких изменений в цену, дабы уменьшить накладные расходы на доставку. Учитывая сказанное выше получается, что если пакет большой, то пока он не будет принят и сцена не будет изменена, отрисовок на экране не будет,Вот вам и фриз
![]()
Пример.
Допустим, есть набор команд от сервера, который меняет сцену. Каждая из этих команд имеет свой время выполнения (которое от текущей сложности сцены тоже, кстати, зависит).
Теперь, если приходит пакет в котором n изменений сцены, то можно это обрабатывать двумя способами:
Первый. приостановить отрисовку, сделать все изменения в сцене (или данных на базе которых она генерится) и разрешить отрисовку. С точки зрения общей производительности это выгодный способ, но в этом случае страдает плавность отрисовки. т.е. мы в за счет "наглядности"сцены добиваемся высокой актуальности внутренних данных.
Второй. приостанавливать отрисовку только для внесения изменений относящихся к одиночной команды из пакета. Это лучше с точки зрения "плавности" отрисовок, но в этом случае мы получаем обратный эффект - мы за счет плавности отрисовки замедляем обработку сетевого пакета и уменьшаем скорость внесения изменений присланных сервером.
Судя по наблюдениям, в Иле отдаётся предпочтение первому способу. И, возможно, что "пакетная обработка изменений" позволили поддерживать 128 человек на сервере одновременно.
Прояснить ситуацию может только разработчик, но думаю, что это не может обсуждаться здесь, поскольку имплементация сетевой и "отрисовочной" частей и их взаимодействия есть секретная штука, и о таком не рассказывают разработчики.
P.S. Разработчиков, знающих как там всё по настоящему, просьба не смеяться над моим дилетантским мнением![]()





Ответить с цитированием