Внеэкранное рисование

Иногда требуется что-то нарисовать заранее, прежде чем выводить на экран. Для этой цели существует объект PGraphics.

PGraphics pGraphics;
float x;
float y;

void setup()
{
  size(500, 400);
  pGraphics= createGraphics(64, 64, JAVA2D);
  background(255);
  imageMode(CENTER);
  x = 0;
  y = 0;
}

void draw()
{
  pGraphics.beginDraw();
  pGraphics.background(255, 10, 10, 10);
  pGraphics.smooth();
  for (int i= 0; i < 8; i++) {
    pGraphics.stroke(random(255), 0, 0);
    pGraphics.line(random(pGraphics.width), 
      random(pGraphics.height), 
      random(pGraphics.width), 
      random(pGraphics.height));
  }
  pGraphics.endDraw();

  image(pGraphics, x, y);
  x += random(4, 16);
  if ( x > width ) {
    x = 0;
    y += random( 32, 64 );
    if ( y > height ) {
      y = 0;
      fill( 255, 32 );
      noStroke();
      rect( 0, 0, width, height );
    }
  }
}

void mousePressed()
{
  if (random(100) < 50) {
    background(0);
  } else {
    background(255);
  }
}

В коде мы объявили объект класса PGraphics и инициализировали его в методе setup(). В методе draw() рисуем несколько линий в объекте PGraphics. Затем объект выводится на экран с помощью функции image(). Затем добавлен код для анимации, меняя значения x и y.

В функции mousePressed() делаем очистку экрана. Цвет фона станет белым или чёрным с равной вероятностью.

Функция createGraphics() создаёт контекст, на котором вы будете рисовать. Первые два параметра - это ширина и высота изображений, третий - рендерер. Для двухмерных линий подойдёт рендерер P2D. Начало рисования объявляется через beginDraw(). Завершение рисования происходит через endDraw(). Между ними находится сам код для рисования.

Данный объект полезен при большом количестве выводимых объектов. Например, вы можете создать много текста в объектах PGraphics, а затем вывести текст на экрана. Без применения такого объекта скетч может тормозить.

results matching ""

    No results matching ""