Навигация по экранам

Материал из wiki.appsalutecreator.com
Версия от 15:28, 13 марта 2013; Jabchik (обсуждение | вклад) (Анимация переходов)
Перейти к: навигация, поиск

Навигация по экранам является важным элементом при разработке приложения. Благодаря ей происходит смена экранов, сюжетных линий и т.д. В appsalute creator можно выделить несколько основных способов навигации:

  • навигация кнопками
  • навигация машинами
  • навигация кнопками и машинами
  • навигация листанием экранов

Навигация кнопками

Если открыть свойства объекта кнопка и внимательно изучить их, то можно заметить такое поле, как перейти на, в этом поле в выпадающем списке нужно выбрать какой-то экран. Тогда, при нажатии на эту кнопку приложение будет переходить на выбранный экран.

!!!ЗАМЕЧАНИЕ: В свойствах объекта кнопка также есть поле не предзагружать, которое по умолчанию равно 0. Это означает, что вся графика экрана, на который переходит эта кнопка будет предзагружаться в текущем экране. С одной стороны это хорошо, так как переход на экран займет меньше времени, чем если бы графика не предзагружалась. Но с другой стороны, у приложения может не хватить памяти и оно будет вылетать. Поэтому, РЕКОМЕНДУЕТСЯ поле не предзагружать ставить в значение 1.

Навигация машинами

Машина состояний находит широкое применение и в навигации по экранам. Для навигации по экранам в машине состояний есть следующие свойства:

  • init -> вернуться назад (back) если установлено в 1, то перейдет на предпоследний просмотренный экран или на экран, id которого записан в параметре prevScrID;
  • set -> экран для перехода (scr) в выпадающем списке выбирается экран, на который перейдет приложение.



Навигация кнопками и машинами

Иногда возникают ситуации, когда требуется использование и кнопок и машин. Использование кнопок и машин очень простое. Вся логика заключается в том, что кнопка будет вызывать состояние машины, где она переходит на экран, либо где она выбирает на какой экран нужно перейти, а потом переходит. В этом случае, кнопке не нужно указывать в поле перейти на какой-то экран, это поле должно оставаться пустым. Чтобы вызвать состояние машины, нужно добавить свойство кнопки (см. Кнопка ).

Навигация листанием экранов

Навигация листанием экранов происходит путем перелистывания экрана пальцем. Это похоже на то, как мы перелистываем страницы в книге. Если в дереве проекта выбрать экран и посмотреть его свойства, то можно найти свойство анимация переходов. В этом свойстве нам нужны следующие поля:

  • время листания: время в ms за которое один экран сменит другой с анимацией
  • лев бордюр (Л): расстояние в px от левого края экрана в границах которого будет восприниматься тач отвечающий за листание, если тач будет за границей, то экраны не будут листаться
  • прав бордюр (П): расстояние в px от правого края экрана в границах которого будет восприниматься тач отвечающий за листание, если тач будет за границей, то экраны не будут листаться
  • верхн. бордюр (В): расстояние в px от верхнего края экрана в границах которого будет восприниматься тач отвечающий за листание, если тач будет за границей, то экраны не будут листаться
  • нижн. бордюр (Н): расстояние в px от нижнего края экрана в границах которого будет восприниматься тач отвечающий за листание, если тач будет за границей, то экраны не будут листаться
  • протяжка: расстояние в px на которое нужно провести тач не отрывая от экрана, чтобы листание сработало
  • лев экран: нужно указать экран, который появится, если будем листать вправо. Если экран не указан, то листание не сработает, так, как не будет знать, какой экран нужно подставить.
  • прав экран: нужно указать экран, который появится, если будем листать влево. Если экран не указан, то листание не сработает, так, как не будет знать, какой экран нужно подставить.
  • верхн. экран: нужно указать экран, который появится, если будем листать вниз. Если экран не указан, то листание не сработает, так, как не будет знать, какой экран нужно подставить.
  • нижн. экран: нужно указать экран, который появится, если будем листать вверх. Если экран не указан, то листание не сработает, так, как не будет знать, какой экран нужно подставить.
Листание пальцем.png

Анимация переходов

Существует несколько типов анимации переходов между экранами:

  • анимация с растворением по альфе
  • анимация листанием

Каждая из этих анимаций будет действовать только при определенных условиях. Так например, растворение по альфе будет в том случае, если экраны меняются с помощью кнопки или машины. А анимация листанием будет в случае использования тача по экрану для перелистывания при условии, что поля соответствующие этой анимации будут настроены Навигация листанием экранов. Анимация с растворением по альфе настраивается следующим образом:
1.) Выбираем экран и заходим в его свойства
2.) Раскрываем поле анимация переходов
3.) В поле тип перехода устанавливаем 1, что отвечает за растворение по альфе
4.) В поле время растворение по альфе указываем время в ms за которое один экран растворится по альфе и сменится другим.

Пример проекта

Перед рассмотрением примера рекомендуется загрузить Файлы проекта
На рисунке ниже показана схема переходов между экранами. Проект состоит из:

  • главное меню - 1 экран
  • игровые экраны - 6 экранов
  • служебный экран с опциями - 1 экран
  • more games (глобальный экран) - 1 экран

На главном меню находится таблица в которой можно выбрать экран на который хотим перейти. В таблице находится 6 экранов на выбор. На каждом игровом экране находится по три кнопки (кроме 1-го и последнего экрана, на них 2 кнопки): кнопка перехода на следующий экран (реализована объектом "машина состояний"), кнопка перехода на предыдущий экран (реализована объектом "кнопка"), кнопка перехода в главное меню (реализована объектом "кнопка").
Кроме этого, на каждом экране находится машина состояний save_cur_screen, которая при заходе на экран сохраняет в опции параметр, который определяет этот экран, как последний посещенный. Сохранение идет двумя способами:

  • Считывается параметр curScrID и полученное значение сохраняется в параметр current.screen_auto;
  • В параметр current.screen_man сохраняется условно присвоенный номер экрана (если screen_01, то присваиваем 1, если screen_02, то 2-ку и т.д.)


Также есть глобальный экран с типом "2", это значит, что этот экран всегда будет открываться при потери фокуса, то есть при сворачивании приложения в трей и открытия его оттуда. Поэтому, чтобы с этого экрана попасть на последний просмотренный экран на нем находятся две кнопки, обе они выполняют одни и те же функции, но каждая использует свой способ перехода. Так верхняя кнопка использует параметр current.screen_auto для перехода (см. машину состояний check_auto). А нижняя кнопка использует параметр current.screen_man (см. машину состояний check_man). Как раз на этом экране есть взаимодействие кнопки и машины. Оба способа перехода верны и правильны, но если стоит задача запоминать большое кол-во просмотренных экранов и переходить на последний просмотренный, то лучше использовать способ прописанный в машине check_auto. Если экранов немного или нужно выбрать только главные экраны на которые стоит переходить, то лучше использовать способ, прописанный в машине check_man.

Переход по экранам.png