|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
синхронизация клиентских прог в флешовой пошаговой стратежке.
камрады. встала такая трабла:
имеется пвп турнир в котором принимают участие до 16х бойцов. каждый боец это человек на флешовом клиенте запущенном в браузере. все общение через собственный сокет сервер. флешер сказал что у него все завязано на фпс и он не гарантирует синхронное протекание процессов в игровых клиентах. тоесть у кого то перемещение юнита на 8 клеток займет 8 секунд, у кого то 4 а кого то 0,8. менять что либо пока отказывается ибо хочет весомые аргументы услышать. А по поводу рассинхронности грит что в пошаговой игре это не трабла а фича. какой на ваш взгляд в такой ситуации лучше всего механизм синхронизации действий применить? поясню: сейчас у меня на сервере отводится 30 секунд каждому игроку чтобы он начал ходить или переход хода. если игрок начал ходить то на ход дается 30 секунд вне зависимости от длины хода. тоесть вне зависимости от того на сколько клеток пошел игрок. на 1 или на 21. и возникает коллизия: если активный игрок сидит на быстром флеш клиенте с высоким фпс, то у него юнит пройдет свой ход значительно бысрее отведенных 30 секунд и если человек захочет совершить второе действие то олучит от сервера отлуп ибо с серверной точки зрения ход еще не закончился. конечно можно предположить что на перемещение на 1 клетку при среднем фпс 30 будет тратиться к примеру 0,75 секунды и исходить из этого, но это не поможет если у клиента будет 120фпс и хождение будет идти в 4 раза быстрее рассчетного . ЗЫ повторюсь хотелось бы красивое решение без привязки от фпс. к таймерам и времени флешер не хочет привязываться ибо грит что это все от сатанистов. :-( или таки нужно как то железобетонно аргнументировать чтобы он ушел от привязки к фпс.
__________________
fast restart: *((int*)0) = 0; |
|
|||||
Регистрация: Feb 2009
Сообщений: 1,195
|
Привязываться к FPS можно только при неизменной конфигурации и производительности аппаратуры, как на игровых консолях. На компьютерах это неправильный подход.
|
|
|||||
Регистрация: Nov 2008
Адрес: Атланта
Сообщений: 1,271
|
а зачем делать завязку на сокеты? когда можно спокойно использовать под Red5 сервер, ведь игра будет работать быстрей
__________________
Пока я жив, Вы горем обеспечены |
|
|||||
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
|
2 zurkis : а что тогда по-твоему red5 ?
|
|
|||||
Цитата:
это раз. во вторых Java тоже на сокетах работает. Добавлено через 14 минут нельзя. он отличный С++ программист, неплохой АС3 и до кучи просто хороший человек и мой друг. мне надо объяснить ему почему к фпс нельзя. а своих знаний флеша у меня крайне мало. потому и стукнулся сюда.
__________________
fast restart: *((int*)0) = 0; Последний раз редактировалось progman; 27.12.2009 в 20:46. |
|
|||||
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
|
визуальное обновление (рендеринг) должен зависеть от скорости компьютера в multiplayer играх...т.е. грубо говоря если игра тормозит у одного из клиентов, то скажем, вместо 5 пикселей за единицу времени, персонаж должен проходить 10...по такому принципу работают TweenLite, TweenMax и т.д. Так же нормальные физические движки... пример можешь посмотреть в моей игрушке в подписи.
Если игра написана с нормальной ООП моделью, то такие вещи меняются быстро. Ну а если криво, то вы попали |
|
|||||
Регистрация: Jan 2009
Сообщений: 1,651
|
Ну, если так подумать - твой флешер-то прав по большому чету. На сервере у тебя должно стоять ограничение на скорость хода(как перемещение за период не более, чем скорость за период), так ведь? Взломан или не взломан клиент у юзера - тебя не должно волновать, это его проблемы. А флешеру с другой стороны - не заморачиваться с пересадкой логики с фпс на таймер.
Но вообще, конечно, на таймере обновление должно висеть и перемещение(dx,dy) должно зависеть не от фпс (+1 за кадр), а от таймера (+cкорость*(текущее время-предудущее время)). Но в данном случае - пошаговая игра и на это можно забить. Главное на сервере предусмотреть проверку! Потому, что даже если клиент привязан к таймеру - я ломаю клиента, и заставляю его отправлять запросы в десять раз чаще, и вуаля!, я бегаю в десять раз быстрее. Когда-то такой эксплоит даже в WoW работал, можно было, даже не ломая клиент, написать скрипт, повесить его на снифер tcp-ip пакетов(простая замена - заменяем один пакет на десять таких же) и бегать аки конь по карте.
__________________
мой пустой блог |
|
|||||
Цитата:
если клиент не ответит за отведенный временной интервал то его серер дропает.
__________________
fast restart: *((int*)0) = 0; |
|
|||||
Регистрация: Jan 2009
Сообщений: 1,651
|
ну проверка есть на сервере, чтобы клиент не переместился на расстояние, превышающее возможное расстояние за это время есть?
или это игра типа черяков, где перемещаешься сколько угодно, лишь бы за отведенное время? всё равно нужно придумывать именно на сервере защиту от "ускорения". Может быть что-то типа не более n-пакетов в секунду, или что-то то в роде. А на фпс клиента я бы забил, если чесно.
__________________
мой пустой блог |
Часовой пояс GMT +4, время: 11:35. |
|
« Предыдущая тема | Следующая тема » |
|
|