p5.js od podstaw

Biblioteka p5.js jest jednym z najpopularniejszych narzędzi do tworzenia grafiki generatywnej, animacji oraz interaktywnych projektów działających bezpośrednio w przeglądarce internetowej.

p5.js jest biblioteką JavaScript inspirowaną środowiskiem Processing. Pozwala tworzyć grafikę 2D, 3D, animacje, gry i sztukę generatywną.

Instalacja biblioteki

Najprostszym sposobem rozpoczęcia pracy jest dołączenie biblioteki z CDN.

<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/p5.min.js"></script>

Pierwszy projekt

Poniższy przykład przedstawia małą aplikację p5.js rysującą koło.

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>p5.js start</title>
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/p5.min.js"></script>
</head>
<body>
<script>
function setup() {
  createCanvas(600, 400);
  background(200);
}

function draw() {
  circle(300, 200, 100);
}
</script>
</body>
</html>

Podstawowa struktura programu

Każdy program p5.js opiera się na dwóch podstawowych funkcjach.

setup()

function setup() {
    createCanvas(800, 600);
}

Funkcja ta wykonywana jest tylko raz podczas uruchamiania programu.

draw()

function draw() {
    background(220);
}

Funkcja wykonywana jest wielokrotnie, domyślnie około 60 razy na sekundę.

Rysowanie figur

Punkt

point(100, 100);

Linia

line(50, 50, 300, 200);

Prostokąt

rect(100, 100, 200, 120);

Koło

circle(200, 200, 100);

Elipsa

ellipse(300, 200, 150, 80);

Kolory i style

Kolory w p5.js definiowane są najczęściej za pomocą modelu RGB.

fill(255, 0, 0);
stroke(0, 0, 255);

circle(200, 200, 100);

Wyłączenie obrysu

noStroke();

Wyłączenie wypełnienia

noFill();

Przezroczystość

fill(255, 0, 0, 100);

Obsługa myszy

p5.js udostępnia wbudowane zmienne mouseX i mouseY.

function draw() {
    background(220);
    circle(mouseX, mouseY, 50);
}

Obsługa kliknięcia

function mousePressed() {
    background(
        random(255),
        random(255),
        random(255)
    );
}

Obsługa klawiatury

function keyPressed() {
    if (key === 'a') {
        background(0);
    }
}

Funkcja random()

let x = random(0, width);
let y = random(0, height);

Losowe kropki

function draw() {
    fill(
        random(255),
        random(255),
        random(255)
    );
    circle(
        random(width),
        random(height),
        20
    );
}

Tworzenie animacji

let x = 0;

function setup() {
    createCanvas(600, 400);
}

function draw() {
    background(220);
    x += 2;
    circle(x, 200, 50);
}

Odbijanie od krawędzi

let x = 200; let speed = 4; let r = 25;
function draw() {
  background(240); x += speed;
  if (x > width - r || x < r) {
    speed *= -1;
  }
  circle(x, 200, 2*r);
}

Tablice i wiele obiektów

Poniższy przykład rysuje losowe cząsteczki.

let particles = [];
function setup() {
  createCanvas(600, 400);
  for (let i = 0; i < 100; i++) {
    particles.push({ x: random(width), y: random(height) });
  }
}
function draw() {
  background(20);
  for (let p of particles) {
    circle(p.x, p.y, 5);
  }
}

Mini projekt - kolorowy chaos

Kolorowe koła o różnym promieniu pojawiają się w losowych miejscach.

function setup() {
    createCanvas(800, 600);
    background(0);
}

function draw() {
    noStroke();
    fill(
        random(255),
        random(255),
        random(255),
        60
    );
    circle(
        random(width),
        random(height),
        random(10, 80)
    );
}

p5.js jest jedną z najlepszych bibliotek do nauki programowania kreatywnego. Pozwala szybko przejść od prostych figur geometrycznych do zaawansowanych animacji, wizualizacji danych, grafiki 3D i sztuki generatywnej.

Przykłady:
Kółko - pierwszy przykład
Losowe kropki
Tworzenie animacji
Odbijanie od krawędzi
Cząsteczki
Kolorowy chaos