данное выражение означает присвоить значению stat0 значение !stat0,PHP код:
stat0=!stat0;
данное выражение означает присвоить значению stat0 значение !stat0,PHP код:
stat0=!stat0;
Т.е. если клик мышью произошел в пределах координат кнопки, то значению stat0 присваивается прямопротивопложное (false меняется на true)?
Тогда понятно, почему:
О как!PHP код:
if (stat0) {port.write('1'); image(dw, 0, 0); }
Спасибо! Как бы еще от фиксации избавиться...
Последний раз редактировалось Pinin; 28.01.2010 в 17:41.
В Processing цикл while не реагирует на некоторые события
Я тоже сначала пытался сделать на этом цикле , но все виснет .
This function can be dangerous because the code inside the while() loop will not finish until the expression inside while() becomes true. It will lock out all other code from running (mouse events will not be updated, etc.) So be careful because this can lock up your code (and sometimes even the Processing environment itself) if used incorrectly.
Последний раз редактировалось Chip; 28.01.2010 в 18:45.
проще такие вещи на дельфи делать, возможностей гораздо больше,
Вот без фиксации.
все что звязано с ком портом я закоментил, т.к. у меня его нет и с ним прога висла.
PHP код:
//import processing.serial.*;
//Serial port;
int x,y,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,w1,h1,w6,h6,lock;
PImage bs; // Все кнопки не нажаты
PImage dw; // Все кнопки не нажаты, нажата "DIM"
PImage dw1; // Все кнопки не нажаты, нажата "MENU"
PImage dw2; // Все кнопки не нажаты, нажата "MUTE"
PImage dw3; // Все кнопки не нажаты, нажата "HW/CITY"
PImage dw4; // Все кнопки не нажаты, нажата "VOL_UP"
PImage dw5; // Все кнопки не нажаты, нажата "VOL_DOWN"
PImage dw6; // Все кнопки не нажаты, нажата "ПИТАНИЕ"
PImage bs1;
PImage bs6;
void setup()
{
//port = new Serial(this, "COM8", 115200); // Прописываем COM-порт на котором у вас сидит Carduino
size(800, 600); //размер окна
bs = loadImage("BG.jpg"); //загрузить все кнопки ненажатыми
dw = loadImage("DIM_down.jpg"); //загрузить изображение с нажатой кнопкой "DIM"
bs1 = loadImage("DIM_down.jpg"); //загрузить изображение малой кнопки
dw1 = loadImage("MENU_down.jpg"); //загрузить изображение с нажатой кнопкой "MENU"
dw2 = loadImage("MUTE_down.jpg"); //загрузить изображение с нажатой кнопкой "MUTE"
dw3 = loadImage("HW_down.jpg"); //загрузить изображение с нажатой кнопкой "HW/CITY"
dw4 = loadImage("VOL_UP_down.jpg"); //загрузить изображение с нажатой кнопкой "VOL_UP"
dw5 = loadImage("VOL_DOWN_down.jpg"); //загрузить изображение с нажатой кнопкой "VOL_DOWN"
bs6 = loadImage("DIM_down.jpg"); // загрузить изображение большой кнопки
dw6 = loadImage("7_down.jpg"); //загрузить изображение с нажатой кнопкой "ПИТАНИЕ"
w1 = 140; // Размер малой кнопки по горизонтали
h1 = 50; // Размер малой кнопки по вертикали
w6 = 100; // Размер большой кнопки по горизонтали
h6 = 90; // Размер большой кнопки по вертикали
x = 17; // Х начальная координата кнопки "DIM"
y = 472; // y начальная координата кнопки "DIM"
x1= 167; // Х начальная координата кнопки "MENU"
y1= 472; // y начальная координата кнопки "MENU"
x2= 321; // Х начальная координата кнопки "MUTE"
y2= 472; // y начальная координата кнопки "MUTE"
x3= 471; // Х начальная координата кнопки "HW/CITY"
y3= 472; // y начальная координата кнопки "HW/CITY"
x4= 170; // Х начальная координата кнопки "VOL_UP"
y4= 395; // y начальная координата кнопки "VOL_UP"
x5= 321; // Х начальная координата кнопки "VOL_DOWN"
y5= 395; // y начальная координата кнопки "VOL_DOWN"
x6= 682; // Х начальная координата кнопки "ПИТАНИЕ"
y6= 435; // y начальная координата кнопки "ПИТАНИЕ"
image(bs,0,0); // Нарисовать в окне все кнопки ненажатыми
}
void draw()
{
if( mousePressed)
{
//image(dw2, 0, 0); // Проверка нажатия в области "DIM"
if (mousePressed && (mouseX >= x && mouseX <= x + w1 && mouseY >= y && mouseY <= y + h1))
{
if(lock==1){image(dw, 0, 0);//port.write('3');
}
lock=0;
}
// Проверка нажатия в области "MENU"
if (mouseX >= x1 && mouseX <= x1 + w1 && mouseY >= y1 && mouseY <= y1 + h1)
{
if(lock==1){image(dw1, 0, 0);//port.write('3');
}
lock=0;
}
// Проверка нажатия в области "MUTE"
if (mouseX >= x2 && mouseX <= x2 + w1 && mouseY >= y2 && mouseY <= y2 + h1)
{
if(lock==1){image(dw2, 0, 0);//port.write('5');
}
lock=0;
}
// Проверка нажатия в области "HW/CITY"
if (mouseX >= x3 && mouseX <= x3 + w1 && mouseY >= y3 && mouseY <= y3 + h1)
{
if(lock==1){image(dw3, 0, 0);//port.write('7');
}
lock=0;
}
// Проверка нажатия в области "VOL_UP"
if (mouseX >= x4 && mouseX <= x4 + w1 && mouseY >= y4 && mouseY <= y4 + h1)
{
if(lock==1){image(dw4, 0, 0);//port.write('9');
}
lock=0;
}
// Проверка нажатия в области "VOL_DOWN"
if (mouseX >= x5 && mouseX <= x5 + w1 && mouseY >= y5 && mouseY <= y5 + h1)
{
if(lock==1){image(dw5, 0, 0);//port.write('A');
}
lock=0;
}
// Проверка нажатия в области "ПИТАНИЕ"
if (mouseX >= x6 && mouseX <= x6 + w6 && mouseY >= y6 && mouseY <= y6 + h6)
{
if(lock==1){image(dw6, 0, 0);//port.write('B');
}
lock=0;
}
}
if(!mousePressed){
if(lock==0){image(bs, 0, 0);lock=1;//port.write('С');
}
}
}
2 AlexNS
Здорово! Я тоже уже башку сломал, пытаясь решить задачу через while (интересно, однако - трое разных людей одним путем было пошли)...
Кстати, по поводу этого while - а такая шняга только в Processing имеет место быть? При написании второго плеча этого проекта у меня она вроде работает.
2 Chip
Собственно, этот топик тоже можно смело приплюсовывать к "Урокам программирования в Processing`е"
И раз уж пошла такая пьянка - не составит труда уточнить по поводу оптимизации графики (на счет трех файлов).
Я поначалу пытался было завести отдельно фон, и отдельно кнопки - но там с наложением объектов проблемка случилась (а и не случилась бы - количество графики это не сократило бы все равно).
Последний раз редактировалось Pinin; 28.01.2010 в 21:37.
Добавил свои 5 коп.
Задержку 100мс , а то на мощном компе при коротком нажатии кнопка не правдоподобно клацает
PHP код:
//import processing.serial.*;
//Serial port;
int x,y,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,w1,h1,w6,h6,lock;
PImage bs; // Все кнопки не нажаты
PImage dw; // Все кнопки не нажаты, нажата "DIM"
PImage dw1; // Все кнопки не нажаты, нажата "MENU"
PImage dw2; // Все кнопки не нажаты, нажата "MUTE"
PImage dw3; // Все кнопки не нажаты, нажата "HW/CITY"
PImage dw4; // Все кнопки не нажаты, нажата "VOL_UP"
PImage dw5; // Все кнопки не нажаты, нажата "VOL_DOWN"
PImage dw6; // Все кнопки не нажаты, нажата "ПИТАНИЕ"
PImage bs1;
PImage bs6;
void setup()
{
//port = new Serial(this, "COM8", 115200); // Прописываем COM-порт на котором у вас сидит Carduino
size(800, 600); //размер окна
bs = loadImage("BG.jpg"); //загрузить все кнопки ненажатыми
dw = loadImage("DIM_down.jpg"); //загрузить изображение с нажатой кнопкой "DIM"
bs1 = loadImage("DIM_down.jpg"); //загрузить изображение малой кнопки
dw1 = loadImage("MENU_down.jpg"); //загрузить изображение с нажатой кнопкой "MENU"
dw2 = loadImage("MUTE_down.jpg"); //загрузить изображение с нажатой кнопкой "MUTE"
dw3 = loadImage("HW_down.jpg"); //загрузить изображение с нажатой кнопкой "HW/CITY"
dw4 = loadImage("VOL_UP_down.jpg"); //загрузить изображение с нажатой кнопкой "VOL_UP"
dw5 = loadImage("VOL_DOWN_down.jpg"); //загрузить изображение с нажатой кнопкой "VOL_DOWN"
bs6 = loadImage("DIM_down.jpg"); // загрузить изображение большой кнопки
dw6 = loadImage("7_down.jpg"); //загрузить изображение с нажатой кнопкой "ПИТАНИЕ"
w1 = 140; // Размер малой кнопки по горизонтали
h1 = 50; // Размер малой кнопки по вертикали
w6 = 100; // Размер большой кнопки по горизонтали
h6 = 90; // Размер большой кнопки по вертикали
x = 17; // Х начальная координата кнопки "DIM"
y = 472; // y начальная координата кнопки "DIM"
x1= 167; // Х начальная координата кнопки "MENU"
y1= 472; // y начальная координата кнопки "MENU"
x2= 321; // Х начальная координата кнопки "MUTE"
y2= 472; // y начальная координата кнопки "MUTE"
x3= 471; // Х начальная координата кнопки "HW/CITY"
y3= 472; // y начальная координата кнопки "HW/CITY"
x4= 170; // Х начальная координата кнопки "VOL_UP"
y4= 395; // y начальная координата кнопки "VOL_UP"
x5= 321; // Х начальная координата кнопки "VOL_DOWN"
y5= 395; // y начальная координата кнопки "VOL_DOWN"
x6= 682; // Х начальная координата кнопки "ПИТАНИЕ"
y6= 435; // y начальная координата кнопки "ПИТАНИЕ"
image(bs,0,0); // Нарисовать в окне все кнопки ненажатыми
}
void draw()
{
if( mousePressed)
{
//image(dw2, 0, 0); // Проверка нажатия в области "DIM"
if (mousePressed && (mouseX >= x && mouseX <= x + w1 && mouseY >= y && mouseY <= y + h1))
{
if(lock==1){image(dw, 0, 0);//port.write('3');
}
lock=0;
}
// Проверка нажатия в области "MENU"
if (mouseX >= x1 && mouseX <= x1 + w1 && mouseY >= y1 && mouseY <= y1 + h1)
{
if(lock==1){image(dw1, 0, 0);//port.write('3');
}
lock=0;
}
// Проверка нажатия в области "MUTE"
if (mouseX >= x2 && mouseX <= x2 + w1 && mouseY >= y2 && mouseY <= y2 + h1)
{
if(lock==1){image(dw2, 0, 0);//port.write('5');
}
lock=0;
}
// Проверка нажатия в области "HW/CITY"
if (mouseX >= x3 && mouseX <= x3 + w1 && mouseY >= y3 && mouseY <= y3 + h1)
{
if(lock==1){image(dw3, 0, 0);//port.write('7');
}
lock=0;
}
// Проверка нажатия в области "VOL_UP"
if (mouseX >= x4 && mouseX <= x4 + w1 && mouseY >= y4 && mouseY <= y4 + h1)
{
if(lock==1){image(dw4, 0, 0);//port.write('9');
}
lock=0;
}
// Проверка нажатия в области "VOL_DOWN"
if (mouseX >= x5 && mouseX <= x5 + w1 && mouseY >= y5 && mouseY <= y5 + h1)
{
if(lock==1){image(dw5, 0, 0);//port.write('A');
}
lock=0;
}
// Проверка нажатия в области "ПИТАНИЕ"
if (mouseX >= x6 && mouseX <= x6 + w6 && mouseY >= y6 && mouseY <= y6 + h6)
{
if(lock==1){image(dw6, 0, 0);//port.write('B');
}
lock=0;
}
}
if(!mousePressed){
if(lock==0)
{
image(bs, 0, 0);
lock=1;//port.write('С');
delay(100);
}
}
}
Последний раз редактировалось Chip; 28.01.2010 в 22:33.
Кстати, может комуто будет интересно, а может и безразлично,
Сейчас эта программа реагирует на нажатие любой клавиши мышки, чтобы сделать раздельные нажатия следует заменить код
на код для левой клавишиPHP код:
if ( mousePressed )...
либо для правойPHP код:
if ( mousePressed && (mouseButton == LEFT))...
PHP код:
if ( mousePressed && (mouseButton == RIGHT))...
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)