API проекта BeeToo

BeeToo API для интерфейсов создан для минимизации количества кода и повышения его повторной используемости (reusability). Сложная 3х уровневая структура графической части проекта управляется простым API. Который остается неизменным от проекта к проекту. Таким образом, минимизируется количество "специфичного" кода, который должен быть написан для каждого последующего помещения в проекте.

Фреймворк анимации

Фреймворк анимации является специализированным интерфейсом, оберткой стандартного интерфейса iRidium Script API IR.Tween: http://wiki2.iridiummobile.ru/Systems_API/IR.Tween

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

Метод и внешний вид запуска процесса анимации схож с функцией animate фреймворка jQuery: https://api.jquery.com/animate

Типичный вызов нашего интерфейса анимации выглядит следующим образом:

Animation.run(IR.GetPopup('FoobarPopup').GetState(0), 'Opacity', {start: 0, finish: 255}, PLAN_POPUP_SHOW_TIME);

Синтаксис:

Animation.run(uiObject, uiProperty, {start: startValue, finish: finishValue}, time, [tweenFunction]);

Параметры функции:

Что внутри класса Animation?

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

Первый свободный поток получает все необходимые параметры для отрисовки анимации.

На этом все, ваш текущий поток свободен от процесса анимации и продолжает свое выполнение. Потому что каждый поток анимации выполняется независимо в отдельном неблокирующем потоке посредством IR.EVENT_WORK: http://wiki2.iridiummobile.ru/Systems_API/IR.EVENT_WORK

Пул поток анимации ограничен тремя потоками. Почему именно три? Потому что каждый отдельный поток создает значительную нагрузку на клиент iRidium (в особенности при выполнении на мобильной платформе).

Если запустить одновременно от 5 до 10 потоков при помощи IR.EVENT_WORK, произойдет ощутимое увеличение времени отклика интерфейса, упадет скорость работы интферйса i2next/i2control приложений.

При попытке старта анимации, когда все потоки анимации уже окажутся заняты, тогда изменяемое свойство субъекта изменится мгновенно, без анимации.

В лог будет выведена соответствующая строчка:

[12:45:02.453] Animation: failed to run animation. Cause: all animation threads are busy!

Особую роль играет глобальная переменная EVENT_WORK_PAUSED типа Boolean Все потоки анимации приостанавливают процесс анимации, пока

EVENT_WORK_PAUSED==true

О назначении данной переменной в прочитаете в разделе "Фреймворк управления видимостью страниц". Пожалуйста, не изменяйте значение глобальной переменной EVENT_WORK_PAUSED в вашем коде. Используйте для доступа и работы с ней только метод setEventWorkPaused.

Фреймворк управления видимостью страниц (popup)

В проекте Project.irp используются страницы (popup), которые никогда не должны быть скрыты. Например, BeeToo_background_popup. Эта страница содержит симпатичные бэкграунды, каждый предназначен для своего помещения.

Поэтому мы не можем использовать IR.HideAllPopups (смотрите http://wiki2.iridiummobile.ru/GUI_API/IR.HideAllPopups). Потому что вызов этой функции скроет бэкграунд и нарушит внешний вид приложения.

Необходимо показывать попапы при помоши метода showPopup и скрывать при помощи метода hidePopup. Процедура hidePopup каждый раз при вызове проверяет: зарегистрировано ли имя страницы (popupName параметр) в списке SHOWED_POPUPS.

Подобным образом, метод hideAllShowOnePopup не вызывает IR.HideAllPopups, а производит вызов процедуры hidePopup для каждой страницы, которая должна быть скрыта.

Перейдем к описанию всех методов API управления видимостью попапов, которые определены в файле скриптов BeeToo_show_hide_popups.js

Кто отображает главную страницу помещения и её background при старте?

При запуске проекта отображается главная страница конкретного помещения и соответствующий ей фон. Данный код всегда располагается в скриптовом модуле BeeToo_onstart_show_popups.js, который, например, содержит следующий код:

                    IR.AddListener(IR.EVENT_START, 0,
                        function () {
                        showBackground('room1');
                        showPopup("BeeToo_room1_main_popup");
                        });