Вторник, 19 Марта 2024, 10:10

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [354]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [144]
Статьи о программах для создания игр, уроки и описания.
Софт [39]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [160]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [128]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Для какой операционной системы пишите игры?
Всего ответов: 17850
Главная » Статьи » Создание игр

Game Maker: многопользовательские игры
Да играть против соперника компьютера интересно. Но гораздо забавней когда твой противник реальный человек. Game Maker имеет поддержку многопользовательского режима (мультиплеера в простонародии).
Вот план нашего урока:
1. Установка соединения
2. Окончание вызова подключения
3. Сеансы создания и соединения

1. Установка соединения
Для того что бы была связь между двум компьютерами, нужно какой - либо протокол связи. Game Make'r предлагает 4 вида связи: TCP/IP, IPX, (Serial) соединения.
IPX соединение (или если быть более точным, протокол) работает, почти полностью прозрачно. Он может использоваться, для того чтобы играть в игрушки с другими людьми по одной локальной сети. Для работы требуется чтобы он был установлен на Вашем компьютере. (Если он не работает, загляните в документацию по Windows. Выберите элемент Сеть (Network) в панели управления (control panel) Windows и добавьте IPX протокол.) TCP/IP - межсетевой (Интернет) протокол. Он может использоваться, для того чтобы играть с другими игроками по Интернет, предполагается что Вы знаете их IP адрес. По локальной (местной) сети Вы можете использовать его без, указания адреса. Модемное подключение производится посредством модема. Вы должны произвести некоторые настройки модема (строка инициализации и номер телефона) чтобы использовать его. Наконец, при использовании последовательной линии (прямое соединение между компьютерами) Вы должны настроить большое некоторое количество параметров порта. Доступны четыре функции GML, которые могут быть использованы для инициализации данных соединений:
mplay_init_ipx()- инициализирует IPX подключение.
mplay_init_tcpip(addr)- инициализирует TCP/IP подключение. addr - строка, содержащая веб адрес или IP адрес, например 'www.gameplay.com' или '123.123.123.12', возможно сопровождаемый номером порта (например ':12'). Указание адреса необходимо только в процессе сеанса соединения (смотри ниже). В локальной сети никакие адреса не нужны.
mplay_init_modem(initstr,phonenr)- инициализирует модемное подключение. initstr - строка инициализации для модема (может быть пустой). phonenr - строка, которая содержит номер телефона, для дозвона (например '0201234567'). Номер телефона необходим только в момент сеанса подключения.
mplay_init_serial(portno,baudrate,stopbits,parity,flow)- инициализирует последовательное подключение. portno - номер порта (1-4). baudrate - скорость передачи данных в бодах, которая будет использоваться (100-256К). stopbits указывает число стопбитов (0 = 1 bit, 1 = 1.5 bit, 2 = 2 bits). parity - указывает четность (0=none, 1=odd, 2=even, 3=mark). И flow указывает на тип управления потоком данных (0=none, 1=xon/xoff, 2=rts, 3=dtr, 4=rts и dtr). Возвращает, если вызов успешный. Типичный вызов - mplay_init_serial(1,57600,0,0,4). Укажите 0 как первый параметр, чтобы открыть диалог пользователя, для изменения настроек.
Ваша игра должна вызвать одну из этих функций только однажды. Все функции сообщают, если ни были успешны. Отсутствие успешного выполнения функции, может свидетельствовать о том, что не установлен специфический протокол или он не поддерживается Вашей машиной. Для проверки наличия успешного подключения, Вы можете использовать следующую функцию
mplay_connect_status()- возвращает состояние текущего подключения. 0 = нет подключения, 1 = IPX подключение, 2 = TCP/IP подключение, 3 = модемное подключение и 4 = последовательное подключение.
2.Окончание вызова подключения
mplay_end()- завершает текущее соединение.
При использовании TCP/IP подключения Вы можете захотеть сообщить человеку, что Вы хотите начать игру с указанием адреса ip своего компьютера. Следующая функция поможет Вам:
mplay_ipaddress()- возвращает IP адрес Вашей машины (например '123.123.123.12') как строку. Вы можете например отобразить это где-нибудь на экране. Обратите внимание, что эта функция медленная, так-что не вызывайте ее часто.
3.Сеансы создания и соединения
В тот момент, когда Вы подключаетесь к сети, в этой сети могут быть запущены и выполняться множество различных игр. Мы назовем их сеансами. Эти различные сеансы могут соответствовать различным играм или одной и той же игре. Игра должна уникально идентифицировать себя в сети. К счастью, Game Maker делает это для Вас. Единственная вещь, которую Вы должны знать, заключается в том, что, когда Вы изменяете игровой идентификатор в окне опций эти идентификационные данные изменяются. Таким образом Вы можете избежать ситуации, когда люди со старой версией Вашей игры смогут играть с людьми имеющими новую версию.
Если Вы хотите запустить новую многопользовательскую игру, Вы должны создать новый сеанс. Для этого Вы можете использовать следующую подпрограмму:
mplay_session_create(sesname,playnumb,playername)- создает новый сеанс для текущего подключения. sesname - строка, указывающая название сеанса. playnumb - номер, который указывает максимальное число играющих, разрешенных в данной игре (используйте 0 для произвольного числа). playname - Ваше имя как игрока. Возвращает, если успешна.

Один образец игры должен создать сеанс. Другой образец(цы) этой игры должны присоединиться к данному сеансу. В действительности это немного сложнее. Вы сначала должны посмотреть, какие сеансы доступны и затем выбрать нужный для присоединения. Существуют три подпрограммы, необходимые для этого:
mplay_session_find()- ищет все сеансы, которые доступны для подключения игроков и возвращает число найденных сеансов.
mplay_session_name(numb)- возвращает имя номера сеанса numb (0 - первый сеанс). Эта подпрограмма может быть вызвана, только после вызова предыдущей подпрограммы.
mplay_session_join(numb,playername)- создает твой сеанс присоединения номер numb (0 - первый сеанс). playername - Ваше имя как игрока. Возвращает, если успешно.
Имеется еще одна подпрограмма, которая может изменять режим сеанса. Должна быть вызвана перед созданием сеанса:
mplay_session_mode(move)- устанавливает, реально или нет переместить сеанс с хостом на другой компьютер, когда хост отключается. Перемещение должно быть истинно или ложно (по умолчанию).
Чтобы проверить состояние текущего сеанса, Вы можете использовать следующую функцию
mplay_session_status()- возвращает состояние текущего сеанса. 0 = нет сеанса, 1 = созданный сеанс, 2 = соединенный сеанс.
Игрок может остановить сеанс, используя следующую подпрограмму:
mplay_session_end()- заканчивает сеанс для данного игрока.
Игроки
Каждый образец игры, который присоединяется к сеансу является игроком. Как было сказано выше, игроки имеют свои имена. Существуют три подпрограммы, предназначенные для работы с игроками.
mplay_player_find()- ищет всех игроков в текущем сеансе и возвращает число найденных игроков.
mplay_player_name(numb)- возвращает имя игрока номер numb (0 - первый игрок, это всегда ты сам). Эта подпрограмма может быть вызвана после вызова предыдущей подпрограммы.
mplay_player_id(numb)- возвращает уникальный идентификатор номера игрока numb (0 - первый игрок, всегда Вы сами). Эта подпрограмма может вызываться только после вызова первой подпрограммы. Данный идентификатор используется при отправке и приеме сообщений к и от индивидуальных игроков.
Общие данные (Shared data)
Коммуникация общих данных - вероятно самый простой способ синхронизировать игру. Все коммуникации скрыты от Вас. Существует набор из 10000 значений, которые являются общими для всего что содержится в игре. Каждый объект может устанавливать значения и читать значения. Game Maker проверяет, чтобы каждый объект видел те же самые значения. Значения могут быть реальными или строковыми. Доступны только две подпрограммы:
mplay_data_write(ind,val)- записывает значение val (строку или реальное) в локацию ind (ind между 0 и 10000).
mplay_data_read(ind)- возвращает значение в локацию ind (ind между 0 и 10000). Первоначально все значения равны 0.
Чтобы синхронизировать данные на разных машинах, Вы можете использовать гарантируемый режим, который проверяет изменения прибытия на другую машину (но который является медленным) или не-гарантируемый. Изменить это можно используя следующую подпрограмму:
mplay_data_mode(guar)- устанавливает, использовать или нет гарантируемую передачу для общих данных. guar должен или быть истинно (по умолчанию) или ложно.
Сообщения
Второй коммуникационный механизм, который поддерживает Game Maker, это посылка и прием сообщений. Игрок может посылать сообщения одному или всем игрокам. Игроки могут видеть, если прибыли сообщения и принимать соответствующие меры. Сообщения могут быть отправлены в гарантируемый режим, в котором Вы будете уверены, что они прибыли (но он может оказаться медленным) или в не-гарантируемом режиме, который является более быстрым.
Существуют следующие подпрограммы передачи сообщений:
mplay_message_send(player,id,val)- посылает сообщение указанному игроку (либо на идентификатор, либо на имя; используйте 0, чтобы послать сообщение всем игрокам). id - целочисленный идентификатор сообщения, и val - значение (реальное или строка). Сообщение посылается в не-гарантируемом режиме.
mplay_message_send_guaranteed(player,id,val)- посылает сообщение указанному игроку (либо идентификатор либо имя; используйте 0, чтобы послать сообщение всем игрокам). id - целочисленный идентификатор сообщения, и val - значение (реальное или строка). Сообщение посылается в гарантируемом режиме.
mplay_message_receive(player) - принимает следующее сообщение из очереди сообщений, исходящих от указанного игрока (идентификатор или имя). Используйте 0 для сообщений от любого игрока. Подпрограмма возвращает, если действительно имеется новое сообщение. При этом Вы можете использовать следующие подпрограммы, чтобы узнать его содержание:
mplay_message_id() - возвращает идентификатор последнего полученного сообщения.
mplay_message_value() - возвращает значение последнего полученного сообщения.
mplay_message_player() - возвращает игрока, который послал последнее полученное сообщение.
mplay_message_name() - возвращает имя игрока, который послал последнее полученное сообщение.
mplay_message_count(player) - возвращает количество сообщений, оставшихся в очереди от игрока (используйте 0, чтобы сосчитать все сообщение).
mplay_message_clear(player) - удаляет все сообщения, оставшиеся в очереди от игрока (используйте 0, чтобы удалить все сообщение).
Некоторые уточнения вышесказанного. Прежде всего, если Вы хотите послать сообщение только определенному игроку, Вас нужно знать его уникальный идентификатор (id). Как уже сообщалось ранее, Вы можете получить его используя функцию mplay_player_id(). Данный идентификатор игрока, используется также при приеме сообщений от определенного игрока. В качестве альтернативы, Вы можете дать имя игроку, как строку. Если многие игроки имеют такое же имя, то сообщение получит только первый.
Во-вторых, Вы могли бы поинтересоваться, почему каждое сообщение имеет целочисленный идентификатор. Причина в том, что он помогает Вашему приложению посылать различные типы сообщений. Получатель может проверять тип сообщения, используя идентификатор и принять соответствующие действия.

Источник: КЛИК»

Категория: Создание игр | Добавил: Transced (07 Мая 2011) | Автор: Андрей
Просмотров: 11976 | Комментарии: 8 | Рейтинг: 3.2/10 |
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 8
+0-
8 minecrafter2   (02 Октября 2013 10:18) [Материал]
minecrafter2Дерьмо! angry

+0-
7 GameQwerty   (05 Мая 2013 12:41) [Материал]
GameQwertyНадо было код выделить, а то не поймешь где что. cry cry cry

+1-
6 OleGoN   (18 Июня 2011 15:06) [Материал]
OleGoNЧитать не возможно! Хотяб код выделил! wacko

+5-
3 GameMix   (09 Мая 2011 16:13) [Материал]
GameMixСледующая статья про 3D? biggrin

+-2-
4 Transced   (09 Мая 2011 19:17) [Материал]
TranscedВ смысли??? wink

+3-
5 GameMix   (10 Мая 2011 13:44) [Материал]
GameMixВ прямом! Пиши что-нибудь своё, а не переписывай раздел справки, переставляя предложения и слова smile .

+1-
1 WIBarts   (08 Мая 2011 20:04) [Материал]
WIBartsЭто какбэ в справке написано...

+-3-
2 Transced   (08 Мая 2011 20:42) [Материал]
TranscedВ справке не так написано! cool

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Amp II Game Engine
  • Noobster
  • Adventure Game Studio
  • Alice
  • Point&Click Dev Kit
  • Bos Wars
  • Construct Classic
  • PixelLight
  • Tilengine
  • DizzyAGE
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг