И так, для начала нам понадобится естественно сам конструктор игр (оф.сайт), кто не смог найти, вот прямая ссылка на скачивание. Надеюсь, с установкой у вас не возникло проблем, ой о чем это я, к этому времени вы явно должны знать основы пользования этим конструктором игр. Теперь нам понадобиться сам плагин для сетевой игры, кому лень искать, даю ссылку Network v0.3a, для особо ленивых, даю прямую ссылку. Для установки плагина, достаточно скопировать содержимое в архиве, а именно содержимое папки Plugins, в такую же папку Plugins на своем компьютере, куда был установлен construct. Пример: C:\Program Files\Scirra\Construct Classic\Plugins С этим сами разобраться должны. Надеюсь не стоит объяснять, что construct должен быть выключен в это время. У нас все готово, в списках объектов появился Network. Теперь все готово, вы молодцы! Можно передохнуть, сходить выпить чаю.
- - -
Приступим к основам. Добавляем Network в проект, при нескольких Layout, можно сразу в параметрах Common ставить галочку Global, да бы не добавлять его вручную всюду. Далее нужно определиться, как у нас будет устроено все, отдельно запуск сервера и подключение клиентов, или сразу внедрить в игру сервер, чтобы игрок Хост не возился с отдельным запуском файла. ... Чтобы вы не выбрали, будем делать внедренный сервер в игру или программу, смотря что задумали. Поняв работу плагина, по желанию сможете и отдельным файлом подобное сделать. Да бы реализовать внедренный сервер, нужно разграничить события и действия для сервера и клиента. В этом нам поможет создание Групп (Insert group или Add group) в Event sheet Editor. Создаем изначально помечая галочкой, что группа отключена по умолчанию (Disable). Как принято, выбор кто Вы, сервер или клиент делается из меню в игре, для этого создадим спрайты кнопки, или обычные кнопки по желанию. Не важно, главное сделать активацию действия по событию. Создаем событие, при нажатии к примеру на кнопку СЕРВЕР, добавляем действие SYSTEM -> SET GROUP ENABLED, и указываем что группа "SERVER" к примеру (Enable) включена. Подобное и с кнопкой для клиента провернуть надо. Теперь при нажатии на кнопку Сервер, события в группе SERVER будут активны, пора добавить Хост. Добавляем в группу SERVER событие Теперь нужно активировать один раз событие, и действие к нему, что находится в самом плагине. Так как в примере, кнопки и группы находятся на одном Layout то используем переключатель переменную к примеру Start. Далее действие: Network -> Host server (параметры оставим по умолчанию пока). В случае, если после нажатия на кнопку Сервер или Клиент активируется Группа, и делается переброс на другой Layout то вполне сгодится и событие Start of layout.
Теперь, переберемся на сторону клиента, это часто придется бегать от событий сервера к событиям клиента для синхронизации данных. Добавляем такое же событие, и действие к нему Network -> Connect в группе CLIENT.
- - -
Начинаем работу с синхронизацией данных.
Важно подметить, что для того, чтобы активировать действия на стороне клиента или сервера, нужно отправлять тип данных Сообщения, для отправки данных (переменные, координаты, тексты...) используются Пакеты!
Сделаем простой пример, активации действия по Сообщению. Тут все просто, делаем действие отправку сообщения Network -> Send message, и даем само сообщение, что будет активаторов действия на стороне Сервера. На Сервере делаем событие Network -> On message, и указываем сообщение, что должно придти от клиента. Таким образом, по скриншоту видно, что кликая мышкой на клиенте, на сервере спрайт будет смещаться вправо.
Теперь попробуем синхронизировать перемещение. Здесь уже нужны Пакеты. Добавим спрайту поведение 8-Direction. Теперь самое интересное. К примеру, на спрайте с поведением движения, сделаем событие Sprite (вкладка 8 Direction) -> is moving, и действием к нему: Network -> Send packet reliable и вписываем строку...
Код
"DO" & ":" &Player.X & ":" & Player.Y
Где "DO" - имя пакета, а дальше значения разделенные ":" и соединенные &. Player.X Будет являться 1 по счету ячейкой памяти, и так далее.
Возвращаемся на сторону Сервера. Делаем событие Network -> On packet type, и указываем имя отсылаемого пакета с клиента, тот же DO к примеру. И действие к нему, раз уж мы отсылаем координаты X и Y перемещения спрайта, то и на стороне сервера мы должны повторить их. Выбираем в действиях Player (он же Sprite) -> Set position. В ячейку Х вставляем координаты из ячейки 1, аналогично Y присуще 2 ячейка памяти из пакета DO. А как это именно сделать?
Код
GetToken(Network.PacketData,1,":")
Как можно понять, из этой записи, она берет ячейку памяти из пакета, что клиент отослал, под номером 1, где у нас хранится координата Player.X, и приписка разделителя ":". Этот разделитель может быть хоть "-", лишь бы совпадали на клиенте и сервере. Для пересылки координат, есть отдельный тип пакета, там же в выборе действия Network, действия с которым аналогичны.
- - - Можно тут же затронуть тему Каналов. Нет, это не Youtube каналы с вашими любимыми матюками, это тоннели, по которым можно разделять типы данных, дабы не долбить ВСЕ в одну трубу, что в теории может образовать пробку. Номер канала указывается при пересылке сообщения или пакета, и стоит не забыть, что в при создании Хоста или коннекта указывается максимальное число их.
Чуть не забыл, это хоть и мультиплеер, но данный пример рассчитан на связь 1 клиент и 1 сервер. Как сделать связь с много клиентами, разберем в статье #2 уже скоро!
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Construct Classic: Мультиплеерные приключения #1», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.