Pull to refresh

Дружимся с AirPlaySDK

Reading time 5 min
Views 7.8K
Ни для кого не секрет что кодинг для мобильников — дело интересное, прибыльное и перспективное. Я всегда запускаю на КПК какую-нибудь игру когда спускаюсь в метро и вижу как то же самое делают и окружающие меня люди. Но к сожалению текущее разнообразие платформ зачастую заставляет нас ограничить круг поддерживаемых устройств.

Компания «Ideaworks Labs» позаботилась о нас и создала AirPlaySDK. Данный инструментарий позволяет написать код на C++ один раз и компилировать его в нативные приложения для платформ iOS, Android, Samsung Bada, Symbian, Windows Mobile, BREW, Palm/HP WebOS и Maemo. Ну как, впечатляет? Кроме того, AirPlaySDK имеет отличную документацию (правда, на английском языке) и позволяет использовать уникальные особенности той или иной платформы. Вы можете бесплатно скачать и попробовать AirPlaySDK с сайта www.airplaysdk.com или купить Indie-лицензию всего лишь за 99$, а iPhone-разработчикам право использования данного инструментария предоставляется бесплатно (то есть даром).

Создание проекта


AirPlaySDK позволяет писать приложения в Windows или в Mac OS, и хорошо интегрируется с Visual Studio (начиная с версии 6.0) и XCode соответственно. Я буду ориентироваться на Visual Studio, но уверен что для XCode всё будет выглядеть ничуть не сложнее.
Итак, вы скачали и установили AirPlaySDK и Visual Studio. Создайте папку HelloWorld в каком-нибудь месте своего диска. Именно в этой папке будет размещаться наш первый проект.
Главным файлом всего решения является HelloWorld.mkb в папке HelloWorld, создадим и откроем его для редактирования и впишем туда следующее содержимое:

options {
        s3e-data-dir="data"
}
files {
        (source)
        HelloWorld.cpp
        HelloWorld.h
        HelloWorldMain.cpp
}
subprojects {
        iw2d
}


Здесь параметр s3e-data-dir секции options определяет папку, в которой будут находиться ресурсы будущего приложения. Это могут быть изображения, музыка или что-нибудь ещё. Создайте объявленную нами папку data в папке HelloWorld.

Секция files описывает список файлов проекта. В скобках мы указали папку source, которую тоже следует создать. В нём мы поместим три файла: HelloWorld.cpp, HelloWorld.h и HelloWorldMain.cpp.

В секции subprojects находятся названия библиотек, которые мы хотим использовать в своём проекта.

Кроссплатформенный “Hello World!”


Итак, подготовка проекта закончена и мы можем приступить к программированию. Для этого щёлкните два раза на файле HelloWorld.mkb и вы увидите сначала логотип AirPlaySDK, а затем перед вами откроется проект в Visual Studio. Вбейте в файл HelloWorldMain.cpp код, приведённый ниже, а я пока поясню что тут и к чему.

#include "s3e.h"
#include “HelloWorld.h”

int main() {
	GameInit();

	while (true) {
		s3eDeviceYield(0);
		s3eKeyboardUpdate();
		bool result = GameUpdate();

		if ((result == false) ||
			(s3eKeyboardGetState(s3eKeyEsc) &
			S3E_KEY_STATE_DOWN) ||
			(s3eKeyboardGetState(s3eKeyLSK) &
			S3E_KEY_STATE_DOWN) ||
			(s3eDeviceCheckQuitRequest()))
		break;

		GameRender();
	}
	GameShutdown();
}


С помощью директивы #include “s3e.h” мы подключаем стандартный заголовочный файл AirPlaySDK, который даёт нам возможность работать с мобильным устройством.

Функцию GameInit() мы напишем сами. Она будет инициализировать нужные нам переменные, создавать всячески объекты, загружать ресурсы и выполнять прочие действия сразу же при старте программы.

Функция s3eDeviceYield(..) останавливает работу устройства на указанное в параметре время и даёт возможность операционной системе выполнить какие-нибудь действия. В качестве параметра этой функции мы передали ноль, и поэтому получим минимально возможную задержку, разрешённую операционной системой.

s3eKeyboardUpdate() обновляет информацию о текущем состоянии клавиш мобильника и проверяет, не нажимал ли пользователь какие либо клавиши во время прохода цикла.

Функцию GetUpdate() мы тоже напишем сами. В ней, как повелось, обычно размещается вся логика работы приложения. Если Вы пишите игру — то в этой функции следует проверять, не умер ли очередной монстр после выстрела пользователя. Следует заметить, что функция возвращает true если приложение продолжает свою работу, или false если, например, пользователь нажал “Выйти из игры”.

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

В GameRender(), которую мы опять же создадим самостоятельно, идёт отрисовка всего и вся на экран. И, наконец, GameShutdown() (уже четвёртая пока что несуществующая функция) завершает работу нашего приложения, сохраняя результаты, освобождая память и совершая прочие операции.
Ну что ж, главную функцию приложения мы разобрали. Стоит отметить, что файл HelloWorldMain.cpp — это шаблон. Такой файл с практически с тем же содержанием будет присутствовать во всех проектах, которые вы будете создавать при помощи AirPlaySDK.

Описываем логику приложения


Теперь самое время заняться функциями, которые будут определять непосредственно логику приложения. Для этого откройте файл HelloWorld.cpp и вбейте туда код:

#include "Iw2D.h"

void GameInit() {
	Iw2DInit();
}

bool GameUpdate() {
	return true;
}

void GameRender() {
	Iw2DSetColour(0xFF000000); 

	Iw2DFillRect(
		CIwSVec2(0, 0),
		CIwSVec2(Iw2DGetSurfaceWidth(),
			Iw2DGetSurfaceHeight())
        );

	Iw2DSetColour(0xFF00FF00);

	Iw2DFillArc(
		CIwSVec2(Iw2DGetSurfaceWidth()/2,
			Iw2DGetSurfaceHeight()/2),
		CIwSVec2(30, 30),
		0,
		0x800 * 2
		);

	Iw2DSurfaceShow();
}

void GameShutdown() {
	Iw2DTerminate();
}


Как вы уже заметили, код файла HelloWorld.cpp содержит те функции, которые я обещал описать. Ничего сложного в этом листинге нету. Он всего лишь закрашивает экран чёрным цветом и выводит посередине зелёный круг.

Теперь стоит описать прототипы этих функций в заголовочном файле HelloWorld.h, чтобы иметь возможность их вызова из главной функции main(). Выглядеть это будет следующим образом:

#ifndef HELLOWORLD_H
#define HELLOWORLD_H

void GameInit();
bool GameUpdate();
void GameRender();
void GameShutdown();

#endif


Листинг в комментариях не нуждается. Код нашего приложения готов и вы можете запустить его на исполнение, нажав клавишу F5 в Visual Studio. Перед вами откроетса окно эмулятора, которое продемонстрирует наше первое творение на AirPlaySDK.

Сборка проекта


Ну что же, настало время продемонстрировать главное преимущество AirPlaySDK — переносимость приложений с одной платформы на другую.

Выберите “GCC (ARM) Release” в качестве активной конфигурации проекта и нажмите F5. Перед вами появится окно Airplay System Deployment Tool. отметьте пункт “ARM GCC Release” и нажмите “Next”. Следующий шаг ничего интересного пока что для нас не представляет, поэтому нажмите “Next” ещё разок. Вот тут-то и требуется отметить то многообразие платформ, под которое мы хотим скомпилировать наше приложение. Давайте отметим ОС Bada, нажмём “Deploy All” и подождём окончания компиляции нашего проекта.

P.S. Кроме двухмерной графики AirPlaySDK даёт возможность создавать трёхмерные игры, работать с GPS, звуками, списками контактов, сетью, видео и кучей других штучек.

UPD. С некоторых пор Airplay SDK переименован в Marmalade SDK.
Tags:
Hubs:
+17
Comments 25
Comments Comments 25

Articles