Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Processing:Примеры/Рычажки

Материал из Онлайн справочника
Перейти к: навигация, поиск


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Описание[1]

Зажмите кнопкой мыши и потяните какой-нибудь белый квадратик (рычажок), чтобы поменять его позицию.

Пример

  1. Handle[] handles;
  2.  
  3. void setup() {
  4.   size(640, 360);
  5.   int num = height/15;
  6.   handles = new Handle[num];
  7.   int hsize = 10;
  8.   for (int i = 0; i < handles.length; i++) {
  9.     handles[i] = new Handle(width/2, 10+i*15, 50-hsize/2, 10, handles);
  10.   }
  11. }
  12.  
  13. void draw() {
  14.   background(153);
  15.  
  16.   for (int i = 0; i < handles.length; i++) {
  17.     handles[i].update();
  18.     handles[i].display();
  19.   }
  20.  
  21.   fill(0);
  22.   rect(0, 0, width/2, height);
  23. }
  24.  
  25. void mouseReleased()  {
  26.   for (int i = 0; i < handles.length; i++) {
  27.     handles[i].releaseEvent();
  28.   }
  29. }
  30.  
  31. class Handle {
  32.  
  33.   int x, y;
  34.   int boxx, boxy;
  35.   int stretch;
  36.   int size;
  37.   boolean over;
  38.   boolean press;
  39.   boolean locked = false;
  40.   boolean otherslocked = false;
  41.   Handle[] others;
  42.  
  43.   Handle(int ix, int iy, int il, int is, Handle[] o) {
  44.     x = ix;
  45.     y = iy;
  46.     stretch = il;
  47.     size = is;
  48.     boxx = x+stretch - size/2;
  49.     boxy = y - size/2;
  50.     others = o;
  51.   }
  52.  
  53.   void update() {
  54.     boxx = x+stretch;
  55.     boxy = y - size/2;
  56.    
  57.     for (int i=0; i<others.length; i++) {
  58.       if (others[i].locked == true) {
  59.         otherslocked = true;
  60.         break;
  61.       } else {
  62.         otherslocked = false;
  63.       }  
  64.     }
  65.    
  66.     if (otherslocked == false) {
  67.       overEvent();
  68.       pressEvent();
  69.     }
  70.    
  71.     if (press) {
  72.       stretch = lock(mouseX-width/2-size/2, 0, width/2-size-1);
  73.     }
  74.   }
  75.  
  76.   void overEvent() {
  77.     if (overRect(boxx, boxy, size, size)) {
  78.       over = true;
  79.     } else {
  80.       over = false;
  81.     }
  82.   }
  83.  
  84.   void pressEvent() {
  85.     if (over && mousePressed || locked) {
  86.       press = true;
  87.       locked = true;
  88.     } else {
  89.       press = false;
  90.     }
  91.   }
  92.  
  93.   void releaseEvent() {
  94.     locked = false;
  95.   }
  96.  
  97.   void display() {
  98.     line(x, y, x+stretch, y);
  99.     fill(255);
  100.     stroke(0);
  101.     rect(boxx, boxy, size, size);
  102.     if (over || press) {
  103.       line(boxx, boxy, boxx+size, boxy+size);
  104.       line(boxx, boxy+size, boxx+size, boxy);
  105.     }
  106.  
  107.   }
  108. }
  109.  
  110. boolean overRect(int x, int y, int width, int height) {
  111.   if (mouseX >= x && mouseX <= x+width &&
  112.       mouseY >= y && mouseY <= y+height) {
  113.     return true;
  114.   } else {
  115.     return false;
  116.   }
  117. }
  118.  
  119. int lock(int val, int minv, int maxv) {
  120.   return  min(max(val, minv), maxv);
  121. }

См.также

Внешние ссылки

  1. processing.org - Handles