Каковы возможные способы отправки Game / Simulation State с помощью javaNIO? - PullRequest
1 голос
/ 25 марта 2011

Я часто слышал эту фразу, чтобы «отправить состояние игры или состояние симуляции» в сетевую игру / область симуляции, и мой вопрос проистекает из этого, и мне действительно нужно знать, как? .

Я работаю над симуляцией физики сети в реальном времени, мой вопрос только в том, что: * Как состояние симуляции можно передать с сервера на клиент *? (наименьшее состояние симуляции - это координаты X, Y моделируемых тел =))

Возможный сценарий: на примере простого моделирования шарика сервер перемещает несколько шариков и должен отправить координаты каждого шарика клиенту для рисования и обновления симуляции, а каждый шарик должен двигаться в соответствии с полученными от сервера координатами.

спасибо,

jibbylala

P.S: пожалуйста, не упоминайте ни одного строкового решения, я ищу общий механизм, который может быть применен в различных физических симуляциях.

1 Ответ

1 голос
/ 25 марта 2011

В динамичных динамичных играх состояние динамических объектов постоянно передается в структурах. Под состоянием я подразумеваю обычно положение и вращение. В зависимости от архитектуры модели это может быть сервер, постоянно выдвигающий состояния или отправляющий изменение состояния, когда это происходит. Чаще всего первый. Когда состояние не принимается в какой-то период времени, происходит задержка игры. Состояние также может иметь такие параметры, как скорость, ускорение и т. Д. Действительно зависит от игры и от того, как вы хотите обрабатывать игровые события. Допустим, мы пишем простую 2D-игру с летающими кораблями на поверхности, тогда состояние может быть простым классом в Java, например:

class ShipState{ 
      public float x; 
      public float y; 
      public float angle;
}

Сетевой код в игре заботится о транспортировке этих структур. Игры обычно имеют свой собственный протокол, построенный поверх TCP / IP и UDP, для обработки всего, поскольку в реальных играх используется много разных типов информации, а не только физическое состояние. Если вы серьезно относитесь к своему проекту, вы должны действительно изучить сетевые библиотеки. Я сильно сомневаюсь, что есть что-то действительно хорошее, так как JAVA не очень популярен на этой границе. Один запрос Google вывел эту библиотеку Kryo , которая выглядит довольно неплохо. Вы также можете, вероятно, взглянуть на netty , которая является очень надежной сетевой библиотекой общего назначения. Если бы мне нужно было написать сетевой код для игры на Java, я бы просто покопался в сетевых библиотеках игр с открытым исходным кодом, написанных на C / C ++, таких как Enet , чтобы получить некоторые идеи.

Чтобы понять суть вашего вопроса, касающегося симуляции шара на сервере, это так же просто, как сервер, отправляющий координаты шара, и клиенты, получающие их. Если вы не уверены, как это сделать, возможно, вы захотите взглянуть на эти руководства . И другие общие учебные пособия по Java. Удачи!

...