|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Nov 2009
Сообщений: 5
|
SmartFoxServer + Flash = лаги при движении. почему?
Привет всем.
Вот пишу игрушку SFS + Flash. Делаю передвижение игроков, но удаленно лагает((( Кто компитентный в этой сфере будьте добры, объясните что не так я делаю. Как передвигаются мои игроки: Когда пользователь нажал на кнопку чтобы идти в какую либо сторону, он начинает идти (по таймеру с тиком 70 милисекунд) в ту сторону и включается таймер на 150 милисекунд (я его назвал antiFastTimer защита от рывков на коротких передвижений), и если пользователь за эти 150 секунд успел остановиться то посылается запрос на стоп игрока с новыми координатами для синхронизации, иначе посылается запрос сереверу с координатами что данный игрок пошел. Также вместе с запросом отправляется пинг данного пользователя (от клиента до сервера в одну сторону). Размер шага у меня 5 пикселей, НО, т.к. таймер всегда работает не идеально и на каждой машине по разному, то размер шага я высчитываю из настоящего тика (беру разницу getTime перед и после тика), подгоняю к идеальному и получается что размер шага то больше то меньше взависимости от четкости работы таймера. Когда другие пользователи поймали запрос что игрок стал ходить, то прибавляют к его пингу свой пинг и от исходя из этого числа и координат которые он послал при движении игрок сдвигается на позицию где он сейчас должен быть и начинает также движение по таймеру. Как только другие пользователи ловят запрос на стоп игрока, то просто останавливается таймер и синхронизируются координаты. Когда тестирую на удаленной машине, движение смотрится коряво, не идеально (даже при пинге в 40-70 милисекунд). Может быть SF Server работает медленно? Или чтото я делаю не так? |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Неправильно подходите к вопросу. Где и в какое время должен находится персонаж, вы знаете. Соответственно об этом должны знать все клиенты.
|
|
|||||
Регистрация: Nov 2009
Сообщений: 5
|
Спасибо за ответ. Могли бы вы расписать более подробно вашу мысль?
О том где находится персонаж и так знают все клиенты. Или я Вас неправильно понял? Последний раз редактировалось ИванАнатольевич; 10.11.2009 в 12:42. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Где и в какое время.
|
|
|||||
Регистрация: Nov 2009
Сообщений: 5
|
etc, возможно, Вы неправильно поняли мою проблему, или я неправильно сформировал вопрос.
Проблема в том что из-за лагов, игрок-оппонент успевает пройти лишнее расстояние и когда получает наконец стоп, то дергается назад.Во-вторых, то что когда никто не ходит и т.п. пинг стабильно маленький, а когда начинают активно двигаться, то он может вырасти до секунды задержки. Вопрос как раз в том откуда вылазит такая большая задержка и как от нее избавится? |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Я говорю о том, что у вас подход неправильный. Нужно синхронизировать время с сервером и сервер должен сообщать, в какое время в каком месте должен находится персонаж, а не двигаться в неопределенном направлении неопределенное время.
|
|
|||||
Регистрация: Nov 2009
Сообщений: 5
|
Такой подход идеален если игра типа War Craft (где указал точку куда должен бежать игрок, он и бежит до нее) у меня немного подругому. Движение игроков происходит в реальном времени используя клавишы WASD и в любой момент игрок может остановиться или поменять направление движения (как в игре Alien Shooter). Т.е. если постоянно сервер будет говорить всем игрокам а каждом положении персонажа то будет куча запросов => тормоза усилятся.
etc, или я неправильно Вас понял? Добавлено через 60 часов 22 минуты etc и другие уважаемые компетентные в данном вопросе люди, помогите плиз |
|
|||||
Регистрация: Nov 2009
Сообщений: 1
|
Что если сделать так:
1. Когда пользователь А нажимает на кнопку, его клиент передает на сервер message, о том что А собирается пойти в данном направлении. 2. На сервере это сообщение рассылается всем игрокам и каждый клиент всех игроков начинает модулировть передвижение игрока А. 3. Как только игрок A отжимает клавишу, на сервер передается инфа о том, что А прекратил движение и это сообщение опять рассылается всем, после этого происходит его остановка. Единственный недостаток такого подхода, это время между посылками и ответами сообщений на сервер, быть может оно будет для вас приемлимо. |
|
|||||
Регистрация: Nov 2009
Сообщений: 5
|
Спасибо за ответ, но я как раз так и делаю.
Плюс учитываю пинг в передвижениях. Так что проблема все еще актуальна. может быть SFS так глючно работает? Есть ли какие-нибудь другие скоростные сокет сервера с поддержкой комнат? |
Часовой пояс GMT +4, время: 13:53. |
|
« Предыдущая тема | Следующая тема » |
Теги |
SFS , smart fox server , движение , игра |
|
|