Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2010, 23:03   #1
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию проблемы сетевой игры

Так...постараюсь сформулировать проблему как можно более яснее, ибо понимаю, что с таким вопросом могу остаться и без ответа...
Я занялся реализацией многопользовательского режима для своего детища.
Все вроде бы получилось, но есть некоторые но... Суть игры заключается в следующем: по уровню бегают уродцы, стреляют друг в друга, бросают друг на друга всякие тяжелые камни. Каждым уродцем управляет другой уродец, сидящий за компьютером. Цель игры - перемочить друг друга. Игра в стиле Supaplex, все объекты одного размера, каждый объект занимает определенную ячейку, движущиеся объекты перемещаются с одинаковой скоростью. Программа имеет логический и рендерный циклы, выполняющиеся друг за другом 30 раз в секунду. При нажатии на кнопку уродец поворачивается к нам в профиль и начинает плавное движение, которое заканчивается по истечении заданного интервала времени (0.2 сек), после чего он снова повернут к нам анфас. При движении в логическом цикле происходит перерасчет координат уродца, в зависимости от проиденного количества времени. Пока уродец в движении, он не реагирует на нажатия кнопок. Если зажать кнопку, то будет наблюдаться плавное равномерное движение монстрика, с разворотом в фас только в конце движения, когда мы отпустим кнопку.
В сетевом режиме при нажатии кнопки монстрик начинает движение, а на сервер отправляется сообщение о том, что, дескать, уродец начал движение в таком-то направлении (все это касается только уродцев, управляемых людьми). Сервер броадкастит эту мессагу остальным клиентам. Каждый клиент передвигает у себя соответствующего уродца. Все, вроде бы работает, но, вот беда, если человек зажимает кнопку, то его урод начинает двигаться равномерно, а на сервере и у других клиентов появляются проскоки - то есть, уродец движется с "затормозами" и, иногда, может пройти, скажем, 5 шагов вместо положенных 6-ти. Все работает синхронно только, если все жмут на кнопки, не торопясь, без спешки). Да, кстати, клиент, нажавшего на кнопку игрока, шлет сообщения непрерывно, пока нажата кнопка. Соответственно, большая часть сообщений сервером игнорируется, потому что уродец большую часть времени находиться в движении.
Вот такие дела, даже и не знаю что тут поделать. Посоветуйте что-нибудь, у кого есть какие идеи. Понимаю, что проблема специфична, но, возможно, кто-то встречался с подобными вещами.

Последний раз редактировалось sashonk; 26.08.2010 в 00:45.
sashonk вне форума Ответить с цитированием
Старый 25.08.2010, 23:45   #2
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Цитата:
управляет другой уродец, сидящий за компьютером.
Я в твои игры играть не буду. :D
ZaRDaK вне форума Ответить с цитированием
Старый 25.08.2010, 23:55   #3
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Я не уверен, что понял, хотя все объяснено, вроде, нормально. Но нельзя ли опрашивать клавиатуру раз в долю секунды, а не постоянно (соответственно и мессаги отсылать не постоянно, а с определенным интервалом)?
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 26.08.2010, 00:45   #4
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от ex.cluz Посмотреть сообщение
Я не уверен, что понял, хотя все объяснено, вроде, нормально. Но нельзя ли опрашивать клавиатуру раз в долю секунды, а не постоянно (соответственно и мессаги отсылать не постоянно, а с определенным интервалом)?
ну, там как бы так и происходит, что в каждый вызов логического тика поступают обновленные параметры клавиатуры, то бишь опрос происходит 30 раз в секунду.
sashonk вне форума Ответить с цитированием
Старый 26.08.2010, 00:54   #5
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Может, не так часто делать опрос?
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 26.08.2010, 18:04   #6
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от ex.cluz Посмотреть сообщение
Может, не так часто делать опрос?
30 раз в секунду - это не часто. Иначе будут задержки между нажатием кнопки и действием
sashonk вне форума Ответить с цитированием
Старый 27.08.2010, 01:08   #7
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Вот очень хорошая статья на эту тему
dampirik вне форума Ответить с цитированием
Старый 27.08.2010, 21:39   #8
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от dampirik Посмотреть сообщение
да, статейка интересная
sashonk вне форума Ответить с цитированием
Старый 29.08.2010, 00:25   #9
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от dampirik Посмотреть сообщение
натолкнула на определенные мысли. Переделал структуру сетевого пакета, теперь помимо сообщение о том, в каком направлении сделать шаг, сервер шлет еще и координаты, откуда надо сделать этот шаг. Так что, если координаты удода на сервере и клиенте разойдутся, то со следующим же сообщением сервера клиент снова будет знать, где фактически находится монстрик
sashonk вне форума Ответить с цитированием
Старый 29.08.2010, 10:12   #10
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Вот еще, почитай...
dampirik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последовательные проблемы с картами(сетевой и звуковой) st_ Компьютерное железо 8 18.05.2010 15:32
разработка игры "Реверси". Имеется код этой игры на С++ CD-RW Помощь студентам 0 28.03.2010 00:13
Создание сетевой игры с помощью ТClienSocket, TServerSocket Vitamine Gamedev - cоздание игр: Unity, OpenGL, DirectX 10 23.02.2010 18:18
ПроблеМы с сетевой картой Realtek 8168c(p)/8111c(p) PCI-E Gigabit Ethernet NIC Gatto Компьютерное железо 11 20.11.2009 15:35