Занятие № 5. Взаимодействие с сенсорами мобильного устройства
Задачи
- Изучить назначение компонентов СенсорМестоположение, СенсорОриентации, СенсорАкселерометра и СканерШтрихКода.
- Уметь использовать получаемые с сенсоров значения для управления другими компонентами приложения.
- Научиться объявлять собственные блоки-процедуры и блоки-функции с параметрами и без параметров.
- Научиться применять процедуры и функции для разбиения большой задачи на подзадачи.
Задание № 1. Компас
Перед началом работы, скачайте по ссылке архив с необходимыми изображениями, звуками и шаблоном одного из проектов.
Запустите браузер и нажмите комбинацию клавиш ⌃Ctrl + ⇧Shift + N , чтобы открыть приватное окно. Это необходимо для того, чтобы не сохранять ваш Google-аккаунт в браузере.
Перейдите на сайт App Inventor. Нажмите кнопку . Войдите в ваш Google-аккаунт.
Разработаем приложение для ориентирования на местности. Кроме виртуального компаса, приложение будет показывать широту и долготу места, где вы находитесь.
Для того, чтобы определить азимут, используем компонент СенсорОриентация. Координаты поможет определить компонент
СенсорМестоположения.
Создайте новый проект под именем Compas.
Загрузка медиа-ресурсов
Настройки проекта
Нажмите кнопку , чтобы открыть настройки приложения. В разделе General (Общие настройки) измените свойство AppName (Название приложения) на текст Компас. Это название будет показываться в списке приложений после установки.
Измените свойство Иконка на compas.png.
Нажмите Close, чтобы закрыть окно с настройками проекта.
Проектирование интерфейса
Настройте свойства компонентов согласно следующей таблице:
Компонент | Свойства |
---|---|
Screen1 | TitleVisible=нет галочки ОриентацияЭкрана=Альбомный режим |
![]() |
Ширина=Наполнить родительский |
![]() |
Ширина=50 percent |
![]() |
Ширина=50 percent |
![]() |
Высота=Наполнить родительский Ширина=Наполнить родительский |
![]() |
Изображение=compas.png |
![]() |
ИнтервалРасстояния=10 |
В СпрайтКомпас храниться изображение компаса, которое будет поворачиваться. Необходимо поменять начальную точку вокруг которой будет происходить вращение спрайта.
Программирование компонентов
Поделив ширину и высоту холста на 2, мы получим координату точки в центре экрана.
Вызов процедуры запустит выполнение блоков внутри описания данной процедуры:
Процедуры могут иметь параметры. При вызове такой процедуры нужно указать значения аргументов, передаваемых в блок-процедуры.
Компонент СпрайтКомпас обладает свойством Курс, отвечающим за направление, в которое повёрнут спрайт. Создайте блок-процедуру повернуть_компас
с параметром курс
, для поворота спрайта в указанном направлении:
Запустите приложение. Сравните реальное направление на север с тем, что показывает приложение. Попробуйте пройти с телефоном некоторое расстояние и проверьте, меняется ли значение широты и долготы.
Проект готов.
Задание № 2. QR-чат
Разработаем мобильное приложение с помощью которого пользователь может сканировать QR-коды с текстовыми сообщениями и создавать изображение с QR-кодом на основе указанного текста.
Для разработки понадобится компонент СканерШтрихКода.
Для создания QR-кода используем веб-API. Обратившись по адресу
мы получим изображение с QR-кодом в формате png. В коде будет закодирован текст указанный в параметре text
. Параметры запроса записываются после знака вопроса.
Используем компонент Интернет, чтобы сохранить полученный файл и показать его в компоненте Изображение.
Создайте новый проект под названием QR_chat.
Проектирование интерфейса
Настройте свойства компонентов согласно следующей таблице:
Компонент | Свойства |
---|---|
Screen1 | TitleVisible=нет галочки |
![]() |
Высота=250 pixels Ширина=Наполнить родительский |
![]() |
Ширина=Наполнить родительский |
![]() |
Ширина=Наполнить родительский Подсказка=Ваше сообщение |
![]() |
Текст=Отправить |
![]() |
Ширина=Наполнить родительский Текст=Сканировать |
![]() |
ЖирныйШрифт=есть галочка РазмерШрифта=20 |
![]() |
UseExternalScanner=нет галочки |
![]() |
НазваниеФайлаОтвета=qr.png СохранитьОтвет=есть галочка Timeout=5000 |
Программирование компонентов
Перед вызовом сканеры мы убираем с экрана текст предыдущего сканированного сообщения.
Теперь будем генерировать QR-код на основе введённого пользователем сообщения. Чтобы сделать правильный запрос к веб-API, создадим собственный блок-функцию адрес_запроса
с параметром сообщение
.
Функция будет возвращать результат сложение двух строк:
и значения параметра сообщение
:
Вызов функции адрес_запроса
работает следующим образом:
Запустите приложение. Наберите текст сообщения в текстовое поле и нажмите кнопку Отправить. Через некоторое время на экране телефона должен появиться QR-код с закодированным сообщением. Попросите соседа отсканировать код с экрана вашего телефона и сравните результат скана с вашим сообщением.
Проект готов.
Задание № 3. Космический курьер
Космический курьер потерял уйму подарков в космосе. Помогите курьеру собрать подарки.
Игрок управляет движением ракеты с помощью сенсора ориентации. Наклон устройства приведёт к движению спрайта ракеты. Как только спрайт ракеты пересекается со спрайтом подарка, счёт увеличивается на единицу. Встряхнув телефон можно начать игру заново.
В этом задании используйте шаблон проекта с заранее настроенными компонентами и загруженными медиа-ресурсами.
Откройте шаблон проекта под именем asteroid_shablon.aia. Для этого выберите пункт меню Проекты - Импортировать проект (.aia) с моего компьютера:
В появившемся диалоге нажмите кнопку Выберите файл, выберите файл с шаблоном asteroid_shablon.aia, и нажмите кнопку OK:
После этого откроется шаблон приложения.
Содержимое шаблона
В медиабиблиотеке проекта находятся изображения ракеты и подарка, а также звук увеличения счёта:
В настройках проекта указано его название - Космический курьер. Это название будет показываться в списке приложений после установки. Для иконки приложения выбрано изображение raketa.png.
Интерфейс экрана Screen1 содержит следующие компоненты:
Свойства компонентов настроены согласно следующей таблице:
Компонент | Свойства |
---|---|
Screen1 | TitleVisible=нет галочки ЦветФона=Чёрный ОриентацияЭкрана=Альбомный режим |
![]() |
ЦветФона=Чёрный Высота=Наполнить родительский Ширина=Наполнить родительский |
![]() |
Изображение=box.png |
![]() |
Изображение=raketa.png |
![]() |
ЖирныйШрифт=есть галочка РазмерШрифта=25 Ширина=Наполнить родительский ЦветТекста=Белый ВыравниваниеТекста=центр |
![]() |
Источник=pick.wav |
В этом шаблоне нет заранее созданных скриптов.
Программирование компонентов
Запустите приложение. Направление движения ракеты будет определятся тем, в какую сторону наклонён телефон. Нос ракеты должен быть всегда повёрнут в сторону спрайта с подарком.
Сейчас подарок не реагирует на столкновение с ракетой. Добавим скрипты, которые переместят подарок в случайную позицию после соприкосновения с ракетой.
- Добавьте условный оператор.
- С помощью блока НакладываетсяНаДругой определяем соприкасаются ли два спрайта.
- Вызываем процедуру
разместить подарок
, чтобы переместить его в новую позицию. - Воспроизводим звук
Запустите приложение. Передвигайте ракету, чтобы подобрать коробку. Когда два спрайта пересекаются, подарок должен переместиться в новую случайную позицию. Также воспроизводится звук.
Запустите приложение. Теперь каждый раз после пересечения двух спрайтов, счёт должен увеличиваться на единицу.
Чтобы начать игру заново и обнулить счёт придётся завершить работу приложения. Добавим возможность сбросить счёт, встряхнув телефон.
Запустите приложение. После запуска приложения телефон должен завибрировать. Это означает, что произошёл вызов процедуры старт_игры. Подберите несколько подарков а потом встряхните телефон. Он должен снова завибрировать, а счёт сбросится до нуля.
Проект готов.
Задание № 4. Сейсмограф
Разработаем приложение, которое сможет построить график изменения усреднённого значения ускорения телефона.
Для измерения ускорения используем компонент СенсорАкселерометра. Для того чтобы построить график, используем два компонента -
Chart (общие настройки графика) и вложенный в него компонент
ChartData2D (данные для построения графика). Оба компонента находятся в категории Charts.
Создайте новый проект под названием Graphic.
Проектирование интерфейса
Настройте свойства компонентов согласно следующей таблице:
Компонент | Свойства |
---|---|
Screen1 | TitleVisible=нет галочки ОриентацияЭкрана=Широкоформатный режим |
![]() |
Высота=Наполнить родительский Ширина=Наполнить родительский |
![]() |
LineType=curved |
![]() |
ТаймерВсегдаЗапущен=нет галочки ИнтервалТаймера=50 |
Программирование компонентов
Перейдите в раздел Блоки.
Сенсор ускорения проводит измерения по трём пространственным осям - x, y, z. Вычислим длину суммарного вектора ускорения (зелёная стрелка)1:
Длина суммарного вектора вычисляется по следующей формуле:
Будем использовать суммарное значения для того, чтобы построение графика не зависело от направления движения телефона.
Составьте выражение, которое будет вычислять длину вектора:
Чтобы добавить третье слагаемое к блоку суммирования, нажмите на и перетащите третье слагаемое в шаблон блока:
Запустите приложение. Попробуйте подвигать телефоном в разные стороны. График наглядно покажет изменение ускорения движения телефона, независимо от направления движения. Но сейчас все добавленные точки показываются на графике одновременно. Исправим это.
С помощью блока SetDomain компонента Chart можно изменить отображаемую область данных. На графике будут показываться точки, для которых выполняется следующее неравенство:
Запустите приложение. Теперь на графике будут видны только те точки, что добавлены недавно.
Проект готов.