Главная » Processing » Использование акселерометра в Processing

0

Большинство устройств Android содержат акселерометр. Этот чип используется для опреления ориентации вашего устройства. Он будет возвращать разные значения, если вы будете держать устройство вертикально, горизонтально или вверх дном. В этом примере мы научимся считывать эту информацию для игры в шариком на экране.

Приступим

Создайте новый скетч и сохраните его под именем accelerometer.pde. Откройте меню File | Examples, поищите папку Sensors и откройте пример с акселерометром. Вы обнаружите в скетче вторую вкладку, класс AccelerometerManager.java. Скопируйте этот файл в ваш скетч. Он понадобится нам для создания этого примера.

Как это делается

Начнем с объявления переменных и присвоения им значений в функции setup():

AccelerometerManager acc; float ax;

float ay; float az; float r;

PVector loc; color bgcolor;

void setup()

{

acc = new AccelerometerManager( this );

size( displayWidth, displayHeight ); orientation( PORTRAIT );

smooth();

loc = new PVector( width/2, height/2 ); r = 40;

bgcolor = color( 255, 0, 0 );

}

Далее мы задействуем функцию accelerationEvent(). Эта функция будет вызываться при каждом изменении значения акселерометра. Также нам нужно вызывать функцию redraw() для просмотра изменений:

public void accelerationEvent( float x, float y, float z ) { ax = x;

ay = y; az = z; redraw();

}

В функции draw() мы используем переменные ax и ay для изменения положения шарика. Когда шарик ударится о край экрана, цвет фона изменится.

void draw()

{

float speedX = -(ax / 2); float speedY = ay / 2;

loc.x += speedX; loc.y += speedY;

if ( loc.x < r ) {

bgcolor = color( 255, 128, 0, 32 );

}

f ( loc.x > width – r ) {

bgcolor = color( 128, 255, 0, 32 );

}

if ( loc.y < r ) {

bgcolor = color( 0, 225, 255, 32 );

}

if ( loc.y > height – r ) {

bgcolor = color( 255, 0, 128, 32 );

}

loc.x = constrain( loc.x, r, width – r ); loc.y = constrain( loc.y, r, height – r );

fill( bgcolor );

rect( 0, 0, width, height );

fill( 255 ); noStroke();

ellipse( loc.x, loc.y, r*2, r*2 );

}

Запустите скетч на вашем устройстве и начните его раскачивать. Вы увидите, что на шарик действует гравитация и он скатывается в самую нижнюю точку. Результат будет выглядеть так, как на этом скриншоте:

Как это работает

Самый простой путь начать работать с акселерометром – попробовать класс AccelerometerManager, который поставляется с примерами на Processing. Функция accelerationEvent() в главном скетче используется для преобразания величин акселерометра в переменные ax, ay и az.

Первые четыре строки функции draw() используются для качения шарика.

Я инвертировал величину ax, чтобы убедиться, что шарик катится в нужном направлении. Мне пришлось сделать это, потому что мой шарик катился вверх, когда я наклонял мое устройство влево. В зисимости от вашего устройства вам придется изменить ax или ay.

Дополнительно

Если вы хотите более широко использовать сенсоры в скетчах для Android, существует отличная библиотека под названием Ketai. Эта бибилотека поддерживает акселерометр, гироскоп, определитель местоположения и камеры. Скачать ее можно на Google Code: https://code.google.com/p/ketai/.

Источник: Ян Вантомм, Processing 2: креативное программирование, перевод с английского Александры Мишутиной, Published by Packt Publishing Ltd., 2012, BIRMINGHAM – MUMBAI.

По теме:

  • Комментарии