Игровое Программирование - коммуникация между игрой возражает в 2-м

Основная проблема - то, что ссылка Word в выражении "передача ссылкой" означает что-то совершенно другое от обычного значения ссылки Word в Java.

Обычно в ссылке Java означает ссылка на объект . Но технические термины передача ссылкой/значением из теории языка программирования говорит о ссылка на элемент памяти, содержащий переменную , который является чем-то совершенно другим.

15
задан Gordon Gustafson 3 December 2009 в 00:31
поделиться

4 ответа

Вы можете изучить шаблон посредника . Это позволит вам иметь низкую связь, но да, у вас будет много кода в объекте (ах) посредника для облегчения связи между другими объектами. Но я думаю, либо одно, либо другое. И тогда это предпочтительнее. Это также даст вам больше свободы для выполнения трюков, таких как постановка в очередь определенных запросов на обновление и обработка запросов в более подходящее время, или выполнение пакетной обработки большого количества запросов вместо того, чтобы выполнять их один за другим, что (гипотетически) налагает накладные расходы.

4
ответ дан 1 December 2019 в 04:41
поделиться

Я думаю, что лучший вариант для такого рода вещей - это много использовать шаблон Observer ... создавать события (определение общего или конкретного - это еще одно дизайнерское решение) и заставлять ваши объекты подписываться к тем, которые им нужны.

Например, ваш двигатель может запускать события столкновения или близости, когда 2 объекта находятся рядом, но они будут приняты только теми объектами, которые заинтересованы. Вы можете провести некоторую оптимизацию, чтобы проверить только эти условия с привлеченными наблюдателями.

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

4
ответ дан 1 December 2019 в 04:41
поделиться

Ну, один из способов - настроить архитектуру клиент / сервер. Таким образом, сервер будет обрабатывать все обновления игрового мира и внутреннюю логику, а клиент будет только спрашивать сервер, может ли он выполнять определенные действия. Сервер тогда отвечал, и только тогда клиент рисовал и обновлял игровой экран. Существа, не являющиеся игроками, поступят так же. Единственное различие будет заключаться в том, что клиентом управляет человек, а другие объекты контролируются компьютером. Это позволит вам отделить настройку игрового мира, события и обновления от логики сущности.

Упомянутая вами «система сообщений» называется протоколом приложения и может быть сложной эзотерической двоичной системой или простыми строками, читаемыми человеком, которые я бы рекомендовал. По мере движения игрока сервер отправляет ему список объектов, находящихся в поле зрения клиента. Сущности, не являющиеся игроками, будут действовать таким же образом. То есть путем запроса у сервера разрешения на выполнение действий или информации о другом объекте, который сервер ранее отправил ему, когда он перемещался и попал в поле зрения объекта, и сервер ответил соответствующим ответом или информацией.

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

или для информации о другом объекте, который сервер ранее отправил, когда он перемещался и попал в поле зрения объекта, и сервер, отвечающий соответствующим ответом или информацией.

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

или для информации о другом объекте, который сервер ранее отправил, когда он перемещался и попал в поле зрения объекта, и сервер, отвечающий соответствующим ответом или информацией.

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

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

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

3
ответ дан 1 December 2019 в 04:41
поделиться

Обычно это намного проще, если у вас есть объект над сущностью, выполняющий управление. (например, «мир» или «игра».) Он может легко видеть, какие объекты находятся поблизости от других, и соответственно отправлять события и уведомления.

Если объектам требуется немного больше контекста для принятия значимых решений, когда они » При обновлении вы всегда можете передать мир в этом контексте в той или иной форме. Но пусть мир управляет разделением и размещением объектов, а не требует, чтобы объекты беспокоились об этом напрямую.

(Кроме того, почему квадродерево? Для 2D RPG грубая сетка, вероятно, будет намного проще в реализации и одинаково полезна.)

2
ответ дан 1 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: