Показать сообщение отдельно
Старый 29.03.2009, 04:13   #19
Baisangur
ПроЭктировщик
 
Аватар для Baisangur
 
Регистрация: 10.03.2009
Адрес: Казахстан->Кустанай
Сообщений: 147
Написано 12 полезных сообщений
(для 23 пользователей)
Ответ: Онлайн (Клиент <-> Сервер)

Ужс! Какими вещами завалили человека то!
Юзать UDP - это однозначно, если будешь с TCP играться, то на проверку дохода пакета будет уходить туча времени.
Лучше всего на сервере раз 5 в секунду проходить т.н. "главный цикл", в нем сначала принимать поступившие от всех клиентов данные, сравнивать с теми, которые установлены в настройках сервера и если у кого то, скорость чего либо или сила чего либо выше той, что назначена в сервере сразу банить по IP адресу(ну ето если есть БД, а так можно просто например в текстовичок запрещенные IP складывать), после этой стадии уже делать снимок игрового мира(на сервере) и отсылать данные обратно клиентам. Лучше в этом деле это организовать систему нитей(потоки) ибо если делать все в цикле то тормоза при n-ом кол-ве клиентов будут расти просто в геометрической прогрессии.

Предположим, что есть у тебя сервер и клиент, как сделать так чтобы без задержек у клиента шел процесс:
Как уже говорилось от сервера приходят "снимки" игрового мира, в нашем случае 5 раз в секунду, можно и больше, но это больший объем информации. Строить логику клиента надо так, чтобы получив два снимка он двигал объекты и проигрывал анимацию основываясь на положениях объектов на сервере(стоит, идет, бежит, едет) и полагаясь на полученные две координаты начальные и конечные двигать что - либо, если юзер изменит конечные координаты, то за начальные принять те, что были при изменении конечных. При этом не будут видны задержки движения врагов, или других объектов полагающихся на сервер.
Также, как без задержки обрабатывать врагов:
Допустим есть у тебя в игре монстры(например игра жанра РПГ с мобами):
Если они будут атаковать тебя полагаясь только на сервер то может быть такой эффект, стоишь ты спокойно и через секунду уже лежишь дохлый, это получится если твой интернет канал тормознет, а на сервере уже тебя убъют. Лучше всего делать реакцию монстра на присутствие игрока в самом клиенте, а на сервере только проверять его стейты(живой, мертвый, атакует и т.п.). И умирать должен игрок или монстр только в клиенте, а патом уже отсылаться на сервер. Конечно это все не так просто ибо взломать клиент и набивать таким образом мобов может любой хацкирь-геймер. Что делать? Необходимо принять минимальный промежуток времени, за который моба можно убить средствами клиента - это впринципе спасёт, а вот защита от ботов, блоу фиш ключи это уже другая тема.. =)
В общем думаю из всей этой писанины ясно что и как делать и в какую сторону дышать...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
3dr1aN (09.06.2016)