Предисловие


— Что делает русский человек в кризис?
— Как можно быстрее тратит все свои деньги.


Железка


Приобрел я себе TV LG lb671v и по старой традиции писать что-нибудь под каждую новую железку решил написать игру, тем более что у LG уже есть свой интернет-магазин приложений и открытая SDK для сторонних разработчиков.

Захожу в интернет магазин и, что вы думаете, не нахожу там своего любимого старого доброго лампового… (подставить свое) тетриса. Надо исправить.

Инструменты


Идем на сайт разработчиков в раздел для SmartTV и скачиваем SDK. В пакет средств разработки входят: инструменты командной строки, эмулятор, среда разработки (используется eclipse). Если возникают проблемы с установкой, то смотрим раздел «Troubleshooting» на странице SDK. Установка особых сложностей вызвать не должна.

Платформа WebOS поддерживает несколько типов приложений: Web, Native, Unity, Flash и др. Некоторые из них не доступны для сторонних разработчиков. В моем случае приложение имеет тип web (html5).

Код


Canvas на всю страницу. Найдено на просторах stackoverflow.
<html>
<head>
    <title>Tetris</title>
    <meta charset='utf-8' />
        <style>
        html,
        body {
            width: 100%;
            height: 100%;
            margin: 0;
        }
        canvas {
            display: block;
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            width: 100%;
            height: 100%;
        }
    </style>
</head>
<body onload="initGame()"
    <canvas id='myCanvas' height='1080' width='1920'>Not support</canvas>
    <script>…</script>
</body>
</html>


Игра


Описывать реализацию тетриса не вижу смысла. Каждый уважающий себя программист в своей жизни должен написать пятнашки, змейку и тетрис. Приведу скриншот:



Сборка


1) Кладем все файлы в отдельную папку;
2) Создаем JSON файл с описанием приложения:

Пример
{
    "id": "myapp",
    "version": "1.0.0",
    "vendor": "mycompany",
    "type": "web",
    "main": "index.html",
    "title": "Tetris",
    "icon": "icon80.png",
    "largeIcon": "icon130.png",
    "appDescription": "Classic Tetris game. Enjoy it!",
    "splashBackground": "splashScreen.png",
    "bgImage": "bgImage.png",
    "bgColor": "#d0dbbd",
    "iconColor": "#343829"
}

3) В командной строке переходим в эту папку и запускаем скрипт сборки из SDK: 'ares-package'. После этого, если нет ошибок, то создается файл с расширением *.ipk;
4) Если хотим запустить на эмуляторе, то запускаем эмулятор и выполняем команду: 'ares-install file_name.ipk';
5) Если хотим запустить на TV, то надо:
5.1) подписать приложение на сайте lg (загрузить наш *.ipk и скачать подписанное приложение в виде архива);
5.2) создать директорию на флешке /developer/apps/usr/palm/applications/;
5.4) распаковать в эту директорию скачанный с сайта архив;
5.5) после подключения флешки к TV в списке приложений должно появиться ваше. При этом для запуска обязательно наличие доступа в интернет на TV.

Грабли


Некоторые сложности возникли в борьбе с антиалиасингом, а олдскульный стиль дизайна предполагает четкие пикселы. Приведу сразу решение:
a. единственный вариант, который гарантированно убирает артефакты на всех браузерах – это вставлять прозрачный пиксел между тайлами (актуально, если в изображениях используется прозрачность);
b. рисовать изображения только по целым пикселам.

QA


Были такие замечания: заполнить корректно/полностью описание и результат тестирования, убрать прозрачность иконки, обрабатывать кнопки назад/домой, добавить splashScreen, добавить кнопки в UI. По поводу последнего: у LG к приложениям для TV есть требование — для управления телевизором должно быть достаточно курсора MRCU (мыши). Magic Remote Control Unit — это специальный пульт, аналог геймпада Nintendo Wii.

Несколько камней в огород LG


1) Авторизация на сайтах сбрасывается уже через 30 мин (довольно часто приходится выполнять повторный вход, галочка Remember my ID ни на что не влияет). При этом на сайте разработчиков и в магазине надо регистрироваться по отдельности.
2) Воспроизведение sfx звуков запаздывает на 0.5 секунды, что затрудняет использование звуковых эффектов в играх. Официальная позиция LG: мы работает над этой проблемой (работают уже больше года), используйте графические спецэффекты вместо звуковых. Пришлось от звука отказаться.
3) Не знаю, как обстоят дела с этим в других интернет магазинах, но заполнение описания и результатов тестирования утомляют. Большинство пунктов в тест-плане выглядят так: «Приложение описано должным образом», «Приложение не содержит вредоносного кода», «Нет призывов к насилию и расовой дискриминации», «Приложение работает нормально, без сообщений об ошибках» и т.д.

Поддержка


Порадовала поддержка. Не мог понять замечание от QA: «UI must be navigable with MRCU (Cursor + OK + Back)». Отправил письмо в поддержку на английском, но ответили мне на русском. То ли определили по моему местоположению, то ли по кривому английском. Если специалист из поддержки сидит на Хабре — спасибо тебе.

Немного цифр


2 вечера на разработку прототипа;
1 месяц на доработку;
5 месяцев, чтобы выложить в маркет, т.к. интересная часть работы (кодирование) закончилась, а отказы QA воодушевления не добавляли.

Закон Парето: 20% проекта занимают 80% времени.

[ исходники ]

Комментарии (4)


  1. XlebNick
    03.06.2015 00:29

    Спасибо за статью и за игру :) Успехов в дальнейших разработках!

    Что мне нравится в работниках IT сферы, так это их трудолюбие и вечное стремление к чему-то новому! Даже в свободное время совершенствование!


  1. pluton_od
    03.06.2015 07:48

    Есть альтернативный вариант – использовать ту же html5 базу для игры, но запускать со смартфона. Тогда не нужно регистрировать приложение в магазине, плюс можно играть между несколькими устройствами (наверное, это не для тетриса). Для коммуникаций с WebOS (а также Chrome Cast) есть библиотека Connect SDK.


  1. spmbt
    03.06.2015 20:36

    > Отправил письмо в поддержку на английском, но ответили мне на русском
    --Сейчас первый этап публикации в магазин LG из России, по крайней мере, проводит какая-то русская команда. Регулярно выдаёт озадачивающие отписки без ссылок на правила публикации, расположенные на их сайте.

    В нашем случае, «UI must be navigable with MRCU (Cursor + OK + Back)", выдаваемое неоднократно, мы расшифровали как необходимость пользования не более чем 6 указанными кнопками, несмотря на то, что MRCU (Magic Remote Control Unit) — это их пульт ДУ, содержащий более 6 кнопок.

    В отписках требования могут варьироваться — как с «возможностью» использования колеса мыши, так и с невозможностью использования «Return (Back)».

    Немного о его использовании (и некатегорично, как это оказывается с QA-командой) описано на странице developer.lge.com/webOSTV/design/webos-tv-system-ui/remote-control (скриншот) (выйти на неё непросто, через раздел "Design", где описаны все требования к приложению, а для NetCast — здесь (да, с совместимостью там есть проблемы — пульт 2012 года не подойдёт для 2013-14 годов и для webOS 2014 года). Но и на этой странице нет категоричных требований, а по факту, оказывается, неизменно есть.

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

    Впрочем, примерно то же наблюдалось и с Samsung, по ряду других требований, тоже не указанных явно на сайте.


  1. Baiker
    07.06.2015 13:37

    Привет! Почему игнорите форум про webOS, а точнее его раздела для разработчиков? :)) Напишите пару строчек про эту разработку, если не трудно.