Взаємодія з тачскріном в Processing

Людина взаємодіє з пристроєм шляхом натискання клавіш і торкання тачскрина У цьому прикладі ми подивимося, як визначити, чи торкнулася користувач екрану і як запрограмувати реакцію на цей вплив в скетчі Ми зробимо невеликий додаток для малювання, а заодно подивимося, як це робиться

Як це робиться

Почнемо з написання функції setup () і оголошення логічної змінної Якщо значиться змінної – істина, ми виведемо небудь на екран

boolean touching = false

void setup()

{

size( displayWidth, displayHeight ) smooth()

background( 0 )

}

Для відповіді на дотик ми задіємо метод surfaceTouchevent () Якщо виявлено дотик, ми призначимо змінної touching значення true:

public boolean surfaceTouchEvent( MotionEvent event )

{

if ( eventgetAction() == 2 ) { touching = true

} else {

touching = false

}

return supersurfaceTouchEvent( event )

}

У функції draw () ми додамо вбудовані змінні mouseX, mouseY, pmouseX і

pmouseY для малювання кіл і ліній, коли користувач доторкнеться до екрану:

void draw()

{

if ( touching ) { stroke( 255, 128 ) noFill()

float d = dist( mouseX, mouseY, pmouseX, pmouseY ) float s = map( d, 0, 200, 1, 10 )

strokeWeight( s )

line( mouseX, mouseY, pmouseX, pmouseY ) fill( 255, 255, 0, 16 )

stroke( 0, 128 )

strokeWeight( 1 )

ellipse( mouseX, mouseY, motionPressure * 100, motionPressure * 100 )

}

}

Коли ви запустите скетч на своєму пристрої, ви зможете малювати на екрані Результат буде виглядати так, як на цьому скріншоті:

Як це працює

Відповідь на події в режимі Android працює трохи інакше, ніж в режимі Standard На настільному компютері ми можемо програмувати взаємодію з клавіатурою і мишкою На мобільних пристроях ці функції недоступні Для програмування відповіді на події потрібно застосувати функцію surfaceTouchEvent ():

public boolean surfaceTouchEvent( MotionEvent event ) {}

У цій функції ви можете використовувати всі методи класу MotionEvent Метод getAction () повертає тип дії, вчиненого на пристрої у вигляді цілого числа Якщо воно дорівнює 2, то було торкання:

if ( eventgetAction() == 2 ) { touching = true

} else {

touching = false

}

Для того, щоб переконатися, що все працює правильно, в останньому рядку функції викличемо метод supersurfaceTouchEvent ():

return supersurfaceTouchEvent( event )

У функції draw () ми використовували змінну motionPressure для установки розміру кіл Ця змінна містить площу дотику і оновлюється тільки при торканні екрану

Додатково

У цьому прикладі ми детектувати тільки один дотик Більшість пристроїв Android підтримують мультитач Якщо ви хочете використовувати мультитач, ось приклад коду для доступу до даних з екрану У функції surfaceTouchEvent () тут відстежується кількість дотиків за допомогою виклику методу eventgetPointerCount () Якщо ви пройдетеся по цих вказує обєктам, ви легко отримаєте координати x і y і площа торкання Код такий:

public boolean surfaceTouchEvent( MotionEvent event )

{

int numTouches = eventgetPointerCount()

for ( int i = 0 i &lt numTouches i++ ) { int touchID = eventgetPointerId( i ) float x = eventgetX( i )

float y = eventgetY( i ) float r = eventgetSize( i )

}

return supersurfaceTouchEvent( event )

}

Джерело: Ян Вантомм, Processing 2: креативне програмування, переклад з англійської Олександри Мішутіної, Published by Packt Publishing Ltd, 2012, BIRMINGHAM – MUMBAI

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*