Series 60 предоставляет различные методы, позволяющие установить соединение между устройствами. Вы можете реализовать многопользовательский режим в своей игре. Ниже приведены способы соединения устройств в порядке их пердпочтительности для использования в игре.
Скорость соединения обычно не является критическим параметром для игр, поскольку объем передаваемых данных достаточно мал. Все вышеперечисленные способы соединения вполне подходят для использования в играх.
Прежде всего, при разработке многопользовательской игры Вы должны спроектировать среду и определиться с методом обмена данными. В качестве шаблона можно использовать Active Objects.
Для реализации сетевых методов вам потребуется несколько активных объектов, чтобы осуществлять асинхронные операции. В играх не рекомендуется использовать синхронизацию, поскольку она может привести к торможению (выполнение программы периодически блокируется до получения какого-либо ответа из сети). Наиболее часто используется схема, состоящая из трех активных объектов.
Каждый из этих трех активных объектов обычно имеет собственную машину состояния, а Контроллер может иметь несколько таких машин (для того чтобы иметь возможность контролировать состояние соединения и передачи). В играх обычно используется простейшее соединение, не требующее контроля состояния передачи:
Игровой движок для взаимодействия с сетью использует Контроллер. Взаимодействие между Контроллером и движком обычно реализуется через callback механизм. Controller должен предоставить простой интерфейс и пользователю не обязательно обладать какими-либо знаниями о его внутренней работе. В случае использования Bluetooth и IrDA, достаточно использовать только четыре метода.
При использовании TCP/IP SeekDevices не требуется, а в остальном структура Контроллера такая же.
Все приведенные выше методы, за исключением Disconnect, являются асинхронными и Контроллер передает результат своей работы движку через callback:
Я не буду приводить пример работы с сетью, поскольку это лежит за рамками данного документа. Скажу только, что Bluetooth, IrDA и TCP/IP можно использовать через Sockets Client API (Rsocket):
Вы можете использовать, например, IrDA serial API через Comms Server, но это достаточно сложно. При использовании общих Sockets API проще реализовать поддержку приложением разных способов коммуникации. К примеру, для того чтобы перейти от Bluetooth к TCP/IP потребуется незначительная модификация кода.
Иногда бывает необходимо, например, обновить игру или добавить новый уровень после того как игра проинсталлирована. Необходимые данные можно прикрепить к Email письму, передать через IrDA или с помощью MMS. Series 60 позволяет зарегистрировать типы файлов, так что полученные файлы будут автоматически копироваться в требуемую папку, где игра сможет найти их.
Чтобы позволить игре получать дополнительные данные Series 60 Developer Platform позволяет ей зарегистрировать в системе собственный формат файла, на основе Multipurpose Internet Mail Extensions (MIME). Тип MIME обычно используется приложениями, работающими с коммуникационными возможностями устройства (например, WML браузер или ICQ клиент). Это позволяет им легко находить сохраненные файлы. Думаю вам не надо говорить, что в таком файле можно передать новый уровень для игры, оружие, графику и т.д.
В Series 60 внутри MIME находятся данные в форматеapplication/x-NokiaGameData-<APPLICATION-ID>, где <APPLICATION-ID> - это последние восемь знаков UID вашего Symbian OS приложения. MIME тип объявляется внутри информационного файла Symbian OS приложения (*.aif) (Более подробно об этом будет рассказано в следующей части)
RESOURCE AIF_DATA { app_uid=0x12345678;// UID приложения datatype_list= { DATATYPE { priority= EdataTypePriorityHigh; type= “application/x-NokiaGame-Data-12345678”; } }; }
Параметр priority структуры DATATYPE определяет приоритет важности этих данных для приложения. EdataTypePriorityHigh говорит о том, что другие приложения не имеют права управлять данными этого типа.
Параметр-путь, где нужно разместить полученные файлы определяется в файле с именем <APPLICATION-ID>.ini. Этот файл должен иметь Unicode кодировку и содержать строку SDDataDir=<GAME-PATH>, где <GAME-PATH> - путь куда нужно помещать полученные файлы. Этот путь указывается относительно папки приложения. При инсталляции игры ini файл нужно скопировать в папку \System\SharedData. Это легко можно сделать, задав путь в pkg файле игры.
Series 60 Developer Platform определяет стандартную структуру заголовка для игровых файлов данных, которой нужно придерживаться. Структура проиллюстрирована ниже. ПолеData type можно использовать для внутреннего разделения типов игрового файла.Name - строка в формате Unicode, которую можно поместить в меню, чтобы дать пользователю возможность управлять файлами.Data ID иData version - уникальные номера, определяющие тип и версию данных. ПолеNGDX должно содержать ASCII строку “NGDX.”
Поля | Смещение |
Game ID | 0 |
Data type | 4 |
Длинна данных в байтах | 5 |
Размер поля Name (сколько Unicode символов) | 9 |
Name | 10 |
Data ID | 10+2x |
Data version | 10+2x+4 |
NGDX заголовок | 10+2x+5 |
NGDX заголовок | 10+2x+9 |
Перевод:aRix