Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.11.2009, 11:32
ИванАнатольевич вне форума Посмотреть профиль Отправить личное сообщение для ИванАнатольевич Найти все сообщения от ИванАнатольевич
  № 1  
Ответить с цитированием
ИванАнатольевич

Регистрация: Nov 2009
Сообщений: 5
Question SmartFoxServer + Flash = лаги при движении. почему?

Привет всем.
Вот пишу игрушку SFS + Flash.
Делаю передвижение игроков, но удаленно лагает(((
Кто компитентный в этой сфере будьте добры, объясните что не так я делаю.

Как передвигаются мои игроки:

Когда пользователь нажал на кнопку чтобы идти в какую либо сторону, он начинает идти (по таймеру с тиком 70 милисекунд) в ту сторону и включается таймер на 150 милисекунд (я его назвал antiFastTimer защита от рывков на коротких передвижений), и если пользователь за эти 150 секунд успел остановиться то посылается запрос на стоп игрока с новыми координатами для синхронизации, иначе посылается запрос сереверу с координатами что данный игрок пошел. Также вместе с запросом отправляется пинг данного пользователя (от клиента до сервера в одну сторону). Размер шага у меня 5 пикселей, НО, т.к. таймер всегда работает не идеально и на каждой машине по разному, то размер шага я высчитываю из настоящего тика (беру разницу getTime перед и после тика), подгоняю к идеальному и получается что размер шага то больше то меньше взависимости от четкости работы таймера.

Когда другие пользователи поймали запрос что игрок стал ходить, то прибавляют к его пингу свой пинг и от исходя из этого числа и координат которые он послал при движении игрок сдвигается на позицию где он сейчас должен быть и начинает также движение по таймеру.
Как только другие пользователи ловят запрос на стоп игрока, то просто останавливается таймер и синхронизируются координаты.

Когда тестирую на удаленной машине, движение смотрится коряво, не идеально (даже при пинге в 40-70 милисекунд).

Может быть SF Server работает медленно? Или чтото я делаю не так?

Старый 10.11.2009, 12:17
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Неправильно подходите к вопросу. Где и в какое время должен находится персонаж, вы знаете. Соответственно об этом должны знать все клиенты.

Старый 10.11.2009, 12:22
ИванАнатольевич вне форума Посмотреть профиль Отправить личное сообщение для ИванАнатольевич Найти все сообщения от ИванАнатольевич
  № 3  
Ответить с цитированием
ИванАнатольевич

Регистрация: Nov 2009
Сообщений: 5
Спасибо за ответ. Могли бы вы расписать более подробно вашу мысль?

О том где находится персонаж и так знают все клиенты. Или я Вас неправильно понял?


Последний раз редактировалось ИванАнатольевич; 10.11.2009 в 12:42.
Старый 10.11.2009, 12:57
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Где и в какое время.

Старый 10.11.2009, 13:13
ИванАнатольевич вне форума Посмотреть профиль Отправить личное сообщение для ИванАнатольевич Найти все сообщения от ИванАнатольевич
  № 5  
Ответить с цитированием
ИванАнатольевич

Регистрация: Nov 2009
Сообщений: 5
etc, возможно, Вы неправильно поняли мою проблему, или я неправильно сформировал вопрос.

Проблема в том что из-за лагов, игрок-оппонент успевает пройти лишнее расстояние и когда получает наконец стоп, то дергается назад.Во-вторых, то что когда никто не ходит и т.п. пинг стабильно маленький, а когда начинают активно двигаться, то он может вырасти до секунды задержки.

Вопрос как раз в том откуда вылазит такая большая задержка и как от нее избавится?

Старый 10.11.2009, 23:17
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Я говорю о том, что у вас подход неправильный. Нужно синхронизировать время с сервером и сервер должен сообщать, в какое время в каком месте должен находится персонаж, а не двигаться в неопределенном направлении неопределенное время.

Старый 11.11.2009, 00:24
ИванАнатольевич вне форума Посмотреть профиль Отправить личное сообщение для ИванАнатольевич Найти все сообщения от ИванАнатольевич
  № 7  
Ответить с цитированием
ИванАнатольевич

Регистрация: Nov 2009
Сообщений: 5
Такой подход идеален если игра типа War Craft (где указал точку куда должен бежать игрок, он и бежит до нее) у меня немного подругому. Движение игроков происходит в реальном времени используя клавишы WASD и в любой момент игрок может остановиться или поменять направление движения (как в игре Alien Shooter). Т.е. если постоянно сервер будет говорить всем игрокам а каждом положении персонажа то будет куча запросов => тормоза усилятся.

etc, или я неправильно Вас понял?

Добавлено через 60 часов 22 минуты
etc и другие уважаемые компетентные в данном вопросе люди, помогите плиз

Старый 17.11.2009, 17:51
worm333 вне форума Посмотреть профиль Отправить личное сообщение для worm333 Найти все сообщения от worm333
  № 8  
Ответить с цитированием
worm333

Регистрация: Nov 2009
Сообщений: 1
Что если сделать так:
1. Когда пользователь А нажимает на кнопку, его клиент передает на сервер message, о том что А собирается пойти в данном направлении.
2. На сервере это сообщение рассылается всем игрокам и каждый клиент всех игроков начинает модулировть передвижение игрока А.
3. Как только игрок A отжимает клавишу, на сервер передается инфа о том, что А прекратил движение и это сообщение опять рассылается всем, после этого происходит его остановка.
Единственный недостаток такого подхода, это время между посылками и ответами сообщений на сервер, быть может оно будет для вас приемлимо.

Старый 19.11.2009, 17:21
ИванАнатольевич вне форума Посмотреть профиль Отправить личное сообщение для ИванАнатольевич Найти все сообщения от ИванАнатольевич
  № 9  
Ответить с цитированием
ИванАнатольевич

Регистрация: Nov 2009
Сообщений: 5
Спасибо за ответ, но я как раз так и делаю.
Плюс учитываю пинг в передвижениях.

Так что проблема все еще актуальна. может быть SFS так глючно работает? Есть ли какие-нибудь другие скоростные сокет сервера с поддержкой комнат?

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
SFS , smart fox server , движение , игра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:06.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.