Two.js — это библиотека для рисования 2D-графики с поддержкой
анимации и трансформаций. Несмотря на свою автономность, её возможности
можно расширять за счёт интеграции с другими фреймворками, такими как
p5.js, которая специализируется на удобной работе с холстом
(canvas) и интерактивными элементами. Совместное
использование этих библиотек позволяет сочетать мощную анимационную
систему Two.js с гибкой средой визуальных эффектов p5.js.
Первым шагом является инициализация холста p5.js и привязка Two.js к
его элементу. В p5.js это делается через функцию
createCanvas, а Two.js можно инициализировать на
DOM-элементе холста.
let two;
let p5Canvas;
function setup() {
p5Canvas = createCanvas(600, 400);
// Инициализация Two.js
two = new Two({
width: width,
height: height,
autostart: true
}).appendTo(p5Canvas.elt);
}
Ключевые моменты:
p5Canvas.elt возвращает DOM-элемент
<canvas>, на который можно «повесить» Two.js.autostart: true запускает цикл анимации Two.js
автоматически.После инициализации Two.js можно добавлять графические объекты.
Two.js предоставляет примитивы (Rectangle,
Circle, Ellipse, Polygon) и
группы (Group).
let circle;
function setup() {
createCanvas(600, 400);
two = new Two({ width: width, height: height }).appendTo(canvas.elt);
circle = two.makeCircle(300, 200, 50);
circle.fill = '#FF6347';
circle.stroke = '#333';
circle.linewidth = 2;
}
Особенности интеграции:
p5.js обеспечивает цикл draw(), который вызывается
каждый кадр. Внутри него можно управлять свойствами объектов Two.js для
создания анимации.
let angle = 0;
function draw() {
background(220);
angle += 0.05;
circle.translation.x = 300 + 100 * cos(angle);
circle.translation.y = 200 + 100 * sin(angle);
two.update(); // Обновление сцены Two.js
}
Примечания:
two.update() необходим, если autostart
отключен.cos, sin,
frameCount удобно для создания циклической анимации.p5.js предлагает удобные функции для обработки событий мыши и
клавиатуры (mousePressed, keyPressed). Эти
события могут управлять объектами Two.js напрямую.
function mousePressed() {
circle.fill = color(random(255), random(255), random(255));
}
function keyPressed() {
if (key === 'R') {
circle.rotation += Math.PI / 4;
}
}
Особенности:
Two.js поддерживает группы объектов (Group), что
упрощает организацию сложных сцен. В интеграции с p5.js это позволяет
создавать слои, которые можно динамически анимировать.
let group = two.makeGroup();
let rect1 = two.makeRectangle(200, 200, 80, 50);
let rect2 = two.makeRectangle(250, 250, 100, 60);
group.add(rect1, rect2);
function draw() {
background(240);
group.rotation += 0.01;
two.update();
}
Преимущества группировки:
Two.js позволяет выбирать между SVG, Canvas и WebGL рендерерами. При
использовании с p5.js чаще всего применяют Canvas-рендеринг, чтобы
избежать конфликтов с p5.createCanvas().
two = new Two({
width: width,
height: height,
type: Two.Types.canvas
}).appendTo(canvas.elt);
Рекомендации:
draw().two.update() на больших сценах могут замедлять
производительность.frameCount p5.js и анимации Two.js
(Two.Tween), создаются сложные эффекты плавного
движения.scale, rotation и
translation для объектов или групп, а p5.js может
динамически вычислять параметры для этих трансформаций.Эта интеграция превращает Two.js в мощный инструмент для создания интерактивных и визуально сложных 2D-сцен, используя возможности p5.js для управления циклом анимации и пользовательским вводом.