iflamberg, подвисшие на 300 мс o_0? ну тут скорее дело в кривизне сервера, чем в недостатке предсказаний.
GAIKER, как бы Вам объяснить, если до Вас сразу не доходит. что бы этого избежать, нужно этого не делать, и не делать никаких предсказаний, так как они обречены на провал.
скажу один простой тезис: Вы не сможете предсказать действия соперника, так как они непредсказуемы. а если этих соперников 10, то и подавно. поэтому Вы сколько угодно можете предугадывать ответ сервера на свой запрос, это ничего не изменит в мультиплэйере.
Вам нужно понять, что такое синхронизация времени, и понять, что все действия должны проводится в единой системе исчисления, что бы они имели единую латентность.
принцип простой на самом деле:
1. синхронизируется время с точностью до 100 миллисекунд между сервером и клиентом
2. всё действия, которые должны выполнять игроки, сервер посылает вместе со временем, в которое они должны эти действия закончить.
3. все расчёты на клиенте проводятся относительно серверного времени
4. получаем систему, которая показывает
в реальном времени, что сейчас происходит на сервере, с точностью до 100 миллисекунд.
5. чтобы добиться плавности и сгладить задержки сети, мы самостоятельно рассчитываем скорость исходя из текущих и конечных данных. будут получаться не большие ускорения/замедления незаметные игроку. что бы сгладить ответ сервера, мы можете, например, начать поворачивать Ваш кораблик, или сделать анимационную фиговинку под курсором, что бы отвлечь пользователя на 200 миллисекунд, пока сервер будет отвечать
таким образом при
СИЛЬНОМ лаге, у Вас все кораблики очень быстро прилетят к своим точкам, а не телепортнуться, и пользователь будет видеть, что произошло, а не пытаться врубиться, откуда это всё взялось. не будет писать багрепорты, что он стрелял в кораблик и не попадал, а его застрелил кто-то невидимый в спины.