HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Специфичные вопросы по играм
очень спефичные
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



Специфичные вопросы по играм

Привет всем. Вот и я подъехал со своими странными вам вопросами

Вот ща на уроке Operating Systems изучаю threads. И вот че хотел спросить. Еле откопал main метод в исходах квейка на каком-то сайте, главное на гитхабе не смог

C++ Source Code:
1
WinMain
2
{
3
  while (1)
4
  {
5
    newtime = Sys_DoubleTime ();
6
    time = newtime - oldtime;
7
    Host_Frame (time)
8
    {
9
      setjmp
10
      Sys_SendKeyEvents
11
      IN_Commands
12
      Cbuf_Execute
13
 
14
      /* Network */
15
      CL_ReadPackets
16
      CL_SendCmd
17
 
18
      /* Prediction//Collision */
19
      CL_SetUpPlayerPrediction(false)
20
      CL_PredictMove
21
      CL_SetUpPlayerPrediction(true)
22
      CL_EmitEntities
23
 
24
      /* Rendition */
25
      SCR_UpdateScreen
26
    }
27
    oldtime = newtime;
28
  }
29
}


CL_ReadPackets, CL_SendCmd - как вот эта часть работает? Вот есть у нас UDP сокет, с которого каждую итерацию while(1) считываются данные и UDP сокеты, равные количеству клиентов, на которые сервер отправляет данные? А какие функции используются для этого? Просто когда работал с сокетом, который TCP, то создавали дескриптор файла и считывали через gets, а он, естестенно ждет пока не придут пакеты с клиента. А в игре все норм. Даже если игрок больше не посылает пакеты, все рендерится, просчитывется. Это че игра тред создает для каждого подключения(или даже процесс, но это навряд ли)?

Сообщить модератору | | IP: Записан
Сообщение: 153538

Старое сообщение 12-02-2016 18:01
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1078

Рейтинг



Цитата:
ILZM писал:
Еле откопал main метод в исходах квейка на каком-то сайте, главное на гитхабе не смог


Вот же.
Для других систем - в других файлах.

Цитата:
ILZM писал:
А какие функции используются для этого?


sendto, видимо.

Цитата:
ILZM писал:
создавали дескриптор файла и считывали через gets, а он, естестенно ждет пока не придут пакеты с клиента.


gets - это функция из стандартной библиотеки Си, и она считывает только из stdin.

Сообщить модератору | | IP: Записан
Сообщение: 153540

Старое сообщение 12-02-2016 18:28
- За что?
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



FreeSlave пардон, перепутал gets с read ( socket...

Сообщить модератору | | IP: Записан
Сообщение: 153541

Старое сообщение 12-02-2016 18:58
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1078

Рейтинг



ILZM, sendto - это конечно для посылки. А ты спрашивал про чтение, я невнимательно прочёл. Для получения есть recvfrom.

Насколько я понял, основной твой вопрос заключается в том, как это всё работает без задержек. Сокет может быть установлен в неблокирующий режим через ioctlsocket (на Windows) и ioctl или fcntl. Собственно, в Quake так и делается.

Цитата:
ILZM писал:
read


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

Сообщить модератору | | IP: Записан
Сообщение: 153542

Старое сообщение 12-02-2016 19:20
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 23:40. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Специфичные вопросы по играм
очень спефичные
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024