forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Сеть в играх. (http://forum.boolean.name/showthread.php?t=9816)

Tormaz 13.11.2009 02:25

Ответ: Сеть в играх.
 
Цитата:

Сообщение от Данил (Сообщение 124564)
Т.е. в моем случае я думал сделать , чтобы, допустим ,каждые 50 миллисекунд клиент получал позиции объектов ( допустим, ближайших объектов). В пакете, допустим ,входили такие данные, как позиция объекта, поворот объекта, и команды объекта. Т.е. как - чтобы клиент ставил объект в нужном месте в нужном повороте, а потом просто эти 50 миллисекунд двигал объект по командам, команды в данном случае - то ,что нажимал другой клиент.

Да вроде , если я правильно понял , ты правильно думаешь. Но если ты будешь соединять таким образом не 2 игрока а более, то возникает проблема в разнице задержки пакетов от игроков и не постоянства этой задержки. Если твоя игра не требует точности передвижений , ну к примеру как Linege, то то что ты пишешь реализовать в принципе возможно. Там собственно тыкаешь мышкой а все остальное происходит на сервере. Сто раз в секунду мышку не тыкнешь , да и опрашивать ее можно 2 раза в секунду для такой игры достаточно. Я как то тоже думал загрузить бы клиентов по уши и пусть их сеть и компьютеры дымят :) считают все вплоть до ии . Каждый из игроков посылает пакет всем о своих действиях и все работает. А сервер существует только для коннекта и дисконнекта. Но в таком случае очень велик шанс читерства. Твой компьютер расчитывает , что ты попал ты шлешь клиентам инфу о попадание, а он тебе отвечает А Я В ТАНКЕ поскольку клиент взломан и персонаж неубиваем. И даже если проект не коммерческий жалко ведь будет. Запустишь бесплатно сервер а всякая гадость испортит всю игру и убьет все труды.
Можно конечно делать контроль на читерство на нескольких машинах, проверять возможность действий и сравнивать результат. Это очень интересно.
Но синхронизировать всех будет трудно.
Но для начала создай выделенный сервер. Реши сколько раз в секунду будешь обновлять инфу и начинай уже писать простенькое приложение соединяющее нескольких клиентов.Просто передавай координаты и направление и обновляй их на клиентах. Потом займись плавным передвижением.
Правда с протоколом в блитце напряг. Один выбор UDP. TCP не пойдет так как сервер висеть будет до прихода пакета а поток для него не выделишь ибо блитц и если клиент отрубится то навечный зависон гарантирован.
Но страшного ничего нет. Пакеты UDP не теряются и приходят по порядку , если ты не северный с южным полюсом соединяешь да и там потери исключены это все страшилки и мифы , не гарантируется но доставляется все нормально. Так что на этом не заморачивайся.

Первая моя программа такого типа это были шарики скользящие по земле :-D .
Так что не идиотизм а интересная мысль но трудноисполнимая. сначала делай как все а потом глядишь и будешь первопроходцем с какой нибудь новаторской идеей ))
Коннект к серверу осуществить можно на еще одном выделенном порту для этого. Можно все сделать на одном порту. Разработай протокол обмена инфой сервера и клиента.

tormoz 13.11.2009 07:01

Ответ: Сеть в играх.
 
http://forum.boolean.name/showthread...598#post124598

Tormaz 13.11.2009 12:24

Ответ: Сеть в играх.
 
запустил посмотреть сервер 30 % проца скушал :( написано так понимаю на блитце ? мангос 2 % запущен та том же компе онлайн 12 человек.

jimon 13.11.2009 23:31

Ответ: Сеть в играх.
 
Tormaz
и зачем ты меряешь загруженность проца ? у тебя там управление ядерным реактором что ли ? проц для того и создан чтобы выполнять на нём код, а не крутить в холостую, просто отдавай время системе и будет низкая загруженность проца

Tormaz 13.11.2009 23:37

Ответ: Сеть в играх.
 
А затем, что как только попадается мне сервер :) я сразу смотрю сколько он кушает. И если сервер тратит 30% времени проца то не управляет ли этот сервер атомным реактором ,возникает вопрос ?
Что будет с ним если законектятся хотя бы 1000 человек и еще кричуры начнут двигаться , а то не дай бог думать :) ?
Это какой проц надо будет, если в холостую только 30 %. И если можно поподробней об отдать время системе ? Настроить какими средствами ? Я честно не очень в блитце разбираюсь. Или вы имеете ввиду приоритет в системе ?
Правда я думал , что лучше серверу время отдавать как можно больше.

jimon 14.11.2009 01:24

Ответ: Сеть в играх.
 
Tormaz
с чего ты взял что загруженность процессора и количество выполненной программой работы это одно и тоже ? загруженность процессора это то сколько времени программа будет отдавать системе и не более того

простейший пустой цикл на blitz3d :
Код:

while true
wend

будет сжирать все ресурсы одного ядра (загруженность 100% для одно ядерных процессоров и 50% для двух ядерных, для 4 ядерных - 25% и тд)

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

Код:

Что будет с ним если законектятся хотя бы 1000 человек и еще кричуры начнут двигаться , а то не дай бог думать  ?
Это какой проц надо будет, если в холостую только 30 %.

минимальные знания оценки производительности программ позволяют сразу сказать что такие размышления это бред, нужно брать во внимание сервисные издержки кода, порядок зависимости от количества клиентов и тд, так что при 1 клиенте может быть 30%, при 20 - 40%, а при 1000 всего 45%

так что не занимайся эзотерическими вещами

Tormaz 14.11.2009 01:29

Ответ: Сеть в играх.
 
простейший пустой цикл на blitz3d :
while true
wend
будет сжирать все ресурсы одного ядра (загруженность 100% для одно ядерных процессоров и 50% для двух ядерных, для 4 ядерных - 25% и тд)

Ты это все серьезно ? Или ты это меня разводишь ?;) Если разводишь то держи ответ - 30% это 3х ядерный проц :) И если запустить на 2ядерном проце 3 пустых цикла то системе придется отказаться от от одного из них.
Я и говорю что сервер кушает очень много времени проца а не тепла там или еще чего.
Пустой цикл или нет я не знаю к сожалению так же как и проц . Если он там пустые по логике циклы гоняет то понятно где собака зарыта, значит есть запас. :)

Tormaz 14.11.2009 01:59

Ответ: Сеть в играх.
 
Аааа черт возьми я только что запустил 4 и еще мангос сервак не вырубил. Разделила системка ровно 22-24. Но в принципе это ничего не заначит поскольку ты прав висяк жуткий. А как с этим бороться ? Как отдать время системе ?

jimon 14.11.2009 02:26

Ответ: Сеть в играх.
 
Tormaz
вызывать delay 1 (1 тут означает 1 миллисекунду, можно и 5 поставить), по-сути это делает задержку на 1 миллисекунду, во время задержки менеджер задач ставит на выполнение другие потоки, таким образом ты отдал время системе, совсем не обязательно что реальная задержка будет ровно 1 миллисекунду, она может быть и 10 миллисекунд

Tormaz 14.11.2009 02:32

Ответ: Сеть в играх.
 
Ну сколько отдать понятно. Интересненько.. спасибочки ... щас достанем этот жуткий блитц ))) и снова помучаем..

Отлично выходит и входит. Если можно последний вопрос ? Откуда я должен знать что delay отдает время системе а не крутит пустые циклы ? В том смысле где посмотреть я это был должен раньше, до того как задал этот тупой вопрос?

jimon 14.11.2009 03:35

Ответ: Сеть в играх.
 
Tormaz
я не виноват что в справке это не написано :)

Damp 21.11.2009 18:13

Ответ: Сеть в играх.
 
Во многих случаях можно обойтись без тиков. Какраз сейччас делаю такую стреллялку, где координаты и углы передаются относительно событий клавы и мыши, без таймера.
Если просто:
Игрок жмет на кнопу "вперед", формируется пакет, условно - "Игрок Вася начиннает движение врепед из точки X:Z и c углом Yaw". Пакет уходит на сервер, сервер ни чего не считая рассылает это на всех. Так он начинает двигаться у всех. Пока Василий держит кнопку ни чего не отсылается. Отпускает кнопку, отсылается пакет "остановка игрока Вася в точке X:Z".
В пределах пинга 300-500 все работает вполне сносно. Всреднем игрок совершает 1 событие в 2-3 секунды, каждый пакет 6-10 байт (полезной информации + где-то 100 байт съедает сам TCP), это здорово экономит трафик относительно тиковой схемы.

jimon 21.11.2009 18:30

Ответ: Сеть в играх.
 
Damp
а если пинг будет не стабильным, а прыгать от 10 до 1000 плюс еще потеря пакетов 25% то твоя система не сможет добится одинаковой картинки у всех игроков, а одинаковая картинка это самое важное в сетевых играх

Damp 21.11.2009 19:21

Ответ: Сеть в играх.
 
Пинг так прыгает только на гпрс )) , у 3-х человек тестил с интернетом по проводам, всреднем от 70 до 300..400.
Такая схема может включать и пингкомпенсацию, 2-ух видов: задержка исполнения команды на своем клиенте и дельтатайминг у всех остальных (для этого каждый пакет дополняется информацией о пинге данного клиента).
Конечно контры так не сделать, тк перс может идти только либо по прямой, либо по дуге с определенным радиусом, но что-то аркадно вполне, только что играли :)

ABTOMAT 16.12.2009 20:54

Ответ: Сеть в играх.
 
Цитата:

Сообщение от impersonalis (Сообщение 124572)
уорниг метаморфирование ника детектед!
Tormaz

Вот кстати интересно как это выглядит со стороны правил форума.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot