Создание игр — трудоемкий процесс, но в нем нет магии и таинственности. Он не отличается от создания любого приложения, состоит из тех же шагов, и его возможно разделить на блоки, модули и этапы. Создание сетевой игры может увеличить время и стоимость разработки в несколько раз. Но сетевое взаимодействие приложений — это независимый модуль, разрабатываемый и тестируемый отдельно от самой игры. Именно о таком модуле мы сегодня поговорим. Представляем вам Samsung Chord SDK — бесплатный инструмент для простого и быстрого создания приложений по обмену файлами и сообщениями в реальном времени между устройствами в одной сети.
Samsung много сил вкладывает в развитие Android. Посетите ресурс для разработчиков — там вы обнаружите много полезных инструментов, и одним из них является Samsung Mobile SDK, о котором мы уже писали ранее. В следующих публикациях мы подробнее расскажем о каждом из прочих инструментов.
Samsung Chord SDK (произ. как рус. “коод”, англ. [kɔːd]; перев. связка, хорда, струна, аккорд) позволяет разрабатывать приложения для локального обмена информацией, не используя облако или без знания деталей сети.
Преимущества Chord:
● легкое обнаружение и установка соединения с устройствами рядом;
● взаимодействие в реальном времени с множеством устройств;
● быстрое peer-to-peer соединение без сервера;
● децентрализованная сеть, где участники могут подключать и отключаться в любое время налету.
Samsung Chord SDK v1.0 был выпущен в 25 апреля 2013, он поддерживает Android 4.0 (>= API level 14) — как arm, так и x86 архитектуры. И уже в сентябре 2013 Chord появился в составе Samsung Mobile SDK: был существенно переработан код (к сожалению, обратная совместимость не сохранена), добавлена поддержка шифрованных каналов. Очень полезно будет ознакомиться с FAQ.
Давайте в общих чертах рассмотрим как работает Samsung Chord SDK:
Устройства “device 1-N” подключены к сети одним из способов: Wi-Fi, AndroidAP или Wi-Fi Direct (описание ниже). На устройствах установлено приложение, которое содержит сервис, взаимодействующий с Chord и “activity” приложения. В свою очередь “game” посылает или получает сообщения от “activity”. Каждое из “device” является узлом. Передача сообщений возможна как конкретному узлу, так и каналу. Канал может быть публичным или приватным (более подробно здесь).
Чтобы продемонстрировать, как легко интегрировать Chord в любое игровое приложение, возьмем уже готовую игру Snake из образцов Android SDK: проект доступен на github.
Для начала необходимо установить Samsung Mobile SDK через Eclipse update. Создадим проект из примеров Snake. Далее необходимо скопировать файлы из “%android_path%/samsungmobilesdk/Samsung Mobile SDK/1.0.3/Libs/chord” папку libs нашего проекта и подключить их в Build path.
Далее приведен простой код, не нуждающийся в комментариях:
... @Override public void onCreate(Bundle savedInstanceState) { ... mChordManager = new SchordManager(getActivity()); List<Integer> infList = mChordManager.getAvailableInterfaceTypes(); if(infList.isEmpty()){ return; } int interfaceType = SchordManager.INTERFACE_TYPE_WIFI; try { mChordManager.start(interfaceType, mManagerListener); mSelectedInterface = interfaceType; Log.d(TAG, TAGClass +" start(" + getInterfaceName(interfaceType) + ")"); } catch (IllegalArgumentException e) { Log.d(TAG, TAGClass +" Fail to start -" + e.getMessage()); } catch (InvalidInterfaceException e) { Log.d(TAG, TAGClass +" There is no such a connection."); } catch (Exception e) { Log.d(TAG, TAGClass +" Fail to start -" + e.getMessage()); } } … SchordManager.StatusListener mManagerListener = new SchordManager.StatusListener() { @Override public void onStarted(String nodeName, int reason) { if (reason == STARTED_BY_USER) { SchordChannel channel = mChordManager.joinChannel(CHORD_HELLO_TEST_CHANNEL, mChannelListener); } else if (reason == STARTED_BY_RECONNECTION) { // Re-start by network re-connection. } } @Override public void onStopped(int reason) { if (STOPPED_BY_USER == reason) { // Success to stop by calling stop() method } else if (NETWORK_DISCONNECTED == reason) { // Stopped by network disconnected } } }; private SchordChannel.StatusListener mChannelListener = new SchordChannel.StatusListener() { @Override public void onNodeJoined(String fromNode, String fromChannel) { //сообщаем другим игрокам о том, что мы готовы } @Override public void onDataReceived(String node, String channel, String payloadType, byte[][] payload) { String message = new String(payload[0]); //здесь управляем змейкой } … //здесь опущены другие доступные методы };
Отправить сообщения от других клиентов можно следующим образом (всем нодам публичного канала):
byte[][] payload = new byte[1][]; payload[0] = ”Hello, chord”.getBytes(); SchordChannel channel = mChordManager.getJoinedChannel(CHORD_HELLO_TEST_CHANNEL); channel.sendDataToAll(CHORD_SAMPLE_MESSAGE_TYPE, payload);
Chord позволяет создавать каналы (абстрактные), посредством которых происходит взаимодействие. Каналы могут быть как публичными, так и приватными.
Связь можно установить по Wi-Fi, используя следующие методы:
● INTERFACE_TYPE_WIFI — обычное подключение всех устройств к одной общей точке доступа Wi-Fi;
● INTERFACE_TYPE_WIFIAP — AndroidAP, точкой доступа является один из устройств Android;
● INTERFACE_TYPE_WIFIP2P — обычное соединение Wi-Fi Direct.
Можно предложить пользователю выбрать способ соединения или программно выбрать наиболее подходящий, например, так:
int interfaceType = 0; for (int interfaceValue : mChordManager.getAvailableInterfaceTypes()) { if (interfaceValue == SchordManager.INTERFACE_TYPE_WIFI) { interfaceType = SchordManager.INTERFACE_TYPE_WIFI; break; } else if (interfaceValue == SchordManager.INTERFACE_TYPE_WIFI_AP) { interfaceType = SchordManager.INTERFACE_TYPE_WIFI_AP; break; } else if (interfaceValue == SchordManager.INTERFACE_TYPE_WIFI_P2P) { interfaceType = SchordManager.INTERFACE_TYPE_WIFI_P2P; break; } }
Весь код по подключению и созданию простой игровой механики можно найти в этом коммите, который обеспечивает самую необходимую интеграцию с Chord SDK. Рассмотрим ключевые моменты:
1. Добавлена страница для статуса игроков;
2. каждый управляет своей змейкой;
3. коллизия считается только со своим хвостом, другие игроки игнорируются;
4. змейка видит и есть только “свои” яблоки;
5. скорость змейки остается постоянной;
6. выигрывает тот, у кого змейка длиннее.
Небольшая демонстрация:
и скриншоты:
Также взгляните на пример от команды разработчиков Chord, доступный на странице проекта. В нем есть все необходимое, к тому же его можно использовать как отладочный инструмент.
Пиринговые оверлейные сети требуют много ресурсов, и поэтому встает вопрос о производительности. Взгляните на этот демонстрационный ролик:
Надеюсь, мы уже убедили вас, что Chord — довольно интересный инструмент. Что ещё можно сделать с ним и зачем это Samsung? Все просто: Samsung занимает более 47% Android-рынка (по данным open signal), поэтому кому еще, как не нашей компании, заботиться об экосистеме. Больше хороших приложений — больше довольных пользователей. Вы, как разработчик, можете получить больше новых пользователей и больше игровых сессий, если добавите своё приложение, использующее Samsung Chord SDK, в особый раздел “Play games” в предустановленном приложении “Group Play”, которое можно найти во всех современных телефонах Samsung на Android. Документацию можно найти здесь.
Если у вас появились вопросы или предложения, смело пишите на e-mail: dev.cis@partner.samsung.com.
Как мы уже писали, 13-14 декабря пройдет Apps4All Hackathon и, если у вас есть игра собственной разработки, вы можете попробовать сделать её сетевой с помощью Chord SDK и выиграть призы от Samsung.
Дерзайте и встретимся на хакатоне!
ссылка на оригинал статьи http://habrahabr.ru/company/samsung/blog/205960/
Добавить комментарий