Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






опис змінних






Створення інтерактивних графічних програм

Мета роботи:

Створення власних функцій.

Управління процесом виконання програми за допомогою методів loop(), noLoop().

Створення інтерактивних графічних програм за допомогою методів роботи з мишею та клавіатурою.

Теоретичні відомості

Ускладнимо загальну структуру програми відому з Lab1.

Спочатку йде блок з описом змінних. Змінні можуть бути типу: boolean, byte, char, color, double, float, int, long.

Далі функція setup(), яка викликається, коли програма запускається. Вона визначає параметри графічного вікна та деякі методи для роботи з зображеннями та шрифтами.

Далі функція draw(), яка безперервно виконує рядки коду всередині свого блоку, доки програма не буде зупинена або noLoop(). З цієї функції можна викликати іншу функцію, наприклад створену вами.

Далі - довільні функції, які є в processing або створені вами: void nazvafuncii() {}

Загальнa структура програми

опис змінних

виклик void setup() {}

виклик void draw() {}

виклик void nazvafuncii() {}

Приклад зі створенням власних функцій drawDot1(int x, int y) та drawDot2(int x, int y)

int xs = 15, ys = 60, d = 8; // опис змінних

 

void setup()

{

size(xs * d + d, ys * d + d); // розмір вікна тепер сам підлаштовується під малюнок

noStroke(); rectMode(CENTER); frameRate(20);

}

 

void draw()

{

background(0, 0, 0);

for (int y = 0; y < ys; y++)

for (int x = 0; x < xs; x++)

if (random(1) < 0.5) drawDot(x, y); else drawDot2(x, y); // додали умову виклику функцій

}

 

void drawDot(int x, int y)

{

float r = random(d);

if ((x & 1) == (y & 1)) fill(0, 155, 255); else fill(0, 55, 175);

ellipse(d + x * d, d + y * d, r, r);

}

 

void drawDot2(int x, int y)

{

float r = random(d);

if ((x & 1) == (y & 1)) fill(255, 155, 0); else fill(155, 25, 0);

rect(d + x * d, d + y * d, r, r);

}

 

Інтерактивні програми реагують на наші дії. Інтерактивність - здатність взаємодіяти або знаходитися в режимі діалогу з ким-небудь (людиною) або з чим-небудь (наприклад, комп 'ютером).

Приклад 1

int m = 10, s = 3;

 

void setup()

{

size(1200, 400); stroke(75, 0, 0); background(0, 0, 0);

frameRate(30);

}

 

void draw()

{

if (mousePressed)

{ fill(0, 0, 0, 5); noStroke(); rect(0, 0, width, height); stroke(75, 0, 0); // стираємо екран, по трошки

float r, d = m + 1.5 * dist(pmouseX, pmouseY, mouseX, mouseY);

d = d * 0.5 + random(d * 0.75);

r = 0.05 + random(d * 0.2);

fill(185 + random(70), 75 + random(50), 55 + random(25));

ellipse(mouseX, mouseY, d, d);

fill(255, 255, 255);

for (int i = 0; i < s; i++) ellipse(mouseX + random(-d, d), mouseY + random(-d, d), r, r);

}

}

 

Приклад 2.

int m = 10, s = 5, px, py;

 

void setup()

{

size(1200, 400);

stroke(75, 0, 0); strokeWeight(1.25);

background(0, 0, 0);

frameRate(30);

noLoop();

}

 

void draw()

{

fill(0, 0, 0, 5); noStroke(); rect(0, 0, width, height); stroke(75, 0, 0);

float r, d = m + 1.75 * dist(px, py, mouseX, mouseY), d2 = d / 2;

for (int i = 0; i < s; i++)

{ d = d * 0.5 + random(d * 0.75); r = 0.5 + random(d * 0.25);

fill(125 + random(130), 35 + random(50), 55 + random(25));

ellipse(mouseX + random(-d2, d2), mouseY + random(-d2, d2), d, d);

fill(255, 255, 255);

ellipse(mouseX + random(-d, d), mouseY + random(-d, d), r, r);

}

px = mouseX; py = mouseY;

}

 

void mousePressed() { px = mouseX; py = mouseY; loop(); }

void mouseReleased() { noLoop(); }

 

 

В першому прикладі після натискання кнопки миші відбувається створення графіки. Якщо кнопка не натиснута, то програма все одно 30 разів на секунду звертається до умови if і перевіряє чи часом кнопка вже не натиснута. Це неекономний стильL.

В другому прикладі в функції setup() використано метод noLoop(); який не дає звертатись до функції draw() 30 разів на секунду. Тому після виконання операторів функції draw(), програма переходить до наступних функцій: void mousePressed() {… }

void mouseReleased() { …}

 

Для інтерактивної взаємодії з програмою використовуються такі оператори сайт: https://processing.org/reference/

Для взаємодії з мишею

mouseButton

mousePressed

mouseClicked()

mouseDragged()

mouseMoved()

mousePressed()

mouseReleased()

mouseWheel()

mouseX – системна змінна містить останню координату х положення курсору миші

mouseY - системна змінна містить останню координату у положення курсору миші

pmouseX - системна змінна містить координату х положення курсору миші в попередньому фреймі

pmouseY - системна змінна містить координату у положення курсору миші в попередньому фреймі

 

 

Для взаємодії з клавіатурою

key

keyCode

keyPressed

keyPressed()

keyReleased()

keyTyped()

 

 

Завдання

1. Розглянути на сайті приклади використання вищевказаних операторів.

2. Написати програму для створення пензля, який малює фіолетовим кольором при натисканні правої кнопки та рожевим при натисканні лівої кнопки.

3. Індивідуальні завдання.

Написати програму з такою інтерактивністю:

- При натисканні лівої кнопки – викликається функція, яка малює ваш малюнок в точці вказаній мишею

- При натисканні правої – викликається функція, яка створює вашу анімацію

- При натисканні клавіші «першої - будь-якої на вибір» - завдання з циклів

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

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.01 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал