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

Processing:Примеры/Составные объекты

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


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

Контакты:

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


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


Описание[1]

Объект может включать в себя несколько других объектов. Эта модульность позволяет создавать в программе абстракции высокого уровня.

Пример

  1. EggRing er1, er2;
  2.  
  3.  
  4. void setup() {
  5.   size(640, 360);
  6.   er1 = new EggRing(width*0.45, height*0.5, 0.1, 120);
  7.   er2 = new EggRing(width*0.65, height*0.8, 0.05, 180);
  8. }
  9.  
  10.  
  11. void draw() {
  12.   background(0);
  13.   er1.transmit();
  14.   er2.transmit();
  15. }
  16.  
  17.  
  18.  
  19. class Egg {
  20.   float x, y;   // координаты X и Y
  21.   float tilt;   // угловое смещение влево и вправо
  22.   float angle;  // используется для определения «tilt»
  23.   float scalar; // высота яйца
  24.  
  25.   // конструктор:
  26.   Egg(float xpos, float ypos, float t, float s) {
  27.     x = xpos;
  28.     y = ypos;
  29.     tilt = t;
  30.     scalar = s / 100.0;
  31.   }
  32.  
  33.   void wobble() {
  34.     tilt = cos(angle) / 8;
  35.     angle += 0.1;
  36.   }
  37.  
  38.   void display() {
  39.     noStroke();
  40.     fill(255);
  41.     pushMatrix();
  42.     translate(x, y);
  43.     rotate(tilt);
  44.     scale(scalar);
  45.     beginShape();
  46.     vertex(0, -100);
  47.     bezierVertex(25, -100, 40, -65, 40, -40);
  48.     bezierVertex(40, -15, 25, 0, 0, 0);
  49.     bezierVertex(-25, 0, -40, -15, -40, -40);
  50.     bezierVertex(-40, -65, -25, -100, 0, -100);
  51.     endShape();
  52.     popMatrix();
  53.   }
  54. }
  55.  
  56.  
  57.  
  58. class Ring {
  59.  
  60.   float x, y; // координаты X и Y
  61.   float diameter; // диаметр кольца
  62.   boolean on = false; // включает и выключает дисплей
  63.  
  64.   void start(float xpos, float ypos) {
  65.     x = xpos;
  66.     y = ypos;
  67.     on = true;
  68.     diameter = 1;
  69.   }
  70.  
  71.   void grow() {
  72.     if (on == true) {
  73.       diameter += 0.5;
  74.       if (diameter > width*2) {
  75.         diameter = 0.0;
  76.       }
  77.     }
  78.   }
  79.  
  80.   void display() {
  81.     if (on == true) {
  82.       noFill();
  83.       strokeWeight(4);
  84.       stroke(155, 153);
  85.       ellipse(x, y, diameter, diameter);
  86.     }
  87.   }
  88. }
  89.  
  90.  
  91.  
  92. class EggRing {
  93.   Egg ovoid;
  94.   Ring circle = new Ring();
  95.  
  96.   EggRing(float x, float y, float t, float sp) {
  97.     ovoid = new Egg(x, y, t, sp);
  98.     circle.start(x, y - sp/2);
  99.   }
  100.  
  101.   void transmit() {
  102.     ovoid.wobble();
  103.     ovoid.display();
  104.     circle.grow();
  105.     circle.display();
  106.     if (circle.on == false) {
  107.       circle.on = true;
  108.     }
  109.   }
  110. }

См.также

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

  1. processing.org - Composite Objects