Для начала работы с Two.js необходимо создать объект
сцены, который управляет всей графикой и рендерингом. Инициализация
выполняется через конструктор Two с передачей
конфигурации:
const elem = document.getElementById('draw-shapes');
const two = new Two({
width: 800,
height: 600,
type: Two.Types.svg // или canvas, webgl
}).appendTo(elem);
Здесь ключевые параметры:
svg,
canvas или webgl.После инициализации можно добавлять объекты на сцену и управлять их анимацией.
Two.js предоставляет механизм автообновления,
который обеспечивает непрерывную перерисовку сцены при изменении
объектов. Основной метод для этого — two.play():
two.play();
Когда включено автоматическое обновление:
requestAnimationFrame.update:two.bind('update', function(frameCount) {
circle.rotation += 0.05;
});
Параметры события update:
frameCount — количество прошедших кадров с момента
запуска two.play().Особенности автообновления:
Two.make* удобно создавать комплексные
анимационные сцены.В ряде случаев автоматическое обновление нежелательно, например:
Для ручного обновления используется метод:
two.update();
Пример ручного управления анимацией:
const circle = two.makeCircle(400, 300, 50);
circle.fill = '#FF8000';
let angle = 0;
function rotateCircle() {
angle += 0.05;
circle.rotation = angle;
two.update(); // вручную обновляем сцену
requestAnimationFrame(rotateCircle);
}
rotateCircle();
Ключевые моменты ручного обновления:
two.update() выполняет пересчёт всех трансформаций и
перерисовку.requestAnimationFrame для
создания собственного цикла анимации.| Параметр | Автообновление (two.play()) |
Ручное обновление (two.update()) |
|---|---|---|
| Цикл рендеринга | Встроенный, requestAnimationFrame |
Пользовательский цикл |
| Производительность | Высокая, но непрерывная | Регулируется вручную |
| Контроль над кадрами | Минимальный | Полный |
| Использование | Для динамических сцен и анимаций | Для статических сцен или событий |
Иногда требуется использовать оба режима:
two.play();
function slowEffect() {
rectangle.translation.x += 1;
two.update(); // ручное обновление эффекта
}
setInterval(slowEffect, 200);
Такой подход позволяет разгрузить цикл автообновления, сохранив плавность основных анимаций.
update полезно для синхронизации всех объектов
сцены с одним кадром.position,
rotation, scale) между кадрами корректно
обрабатывается обоими режимами, но в ручном обновлении необходимо явно
вызвать two.update().Для контроля скорости и логики анимации можно использовать кастомный цикл:
let lastTime = 0;
function animate(time) {
const delta = time - lastTime;
lastTime = time;
// Обновляем объекты с учётом delta
square.translation.x += 0.1 * delta;
two.update(); // перерисовка сцены
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
Такой подход позволяет:
two.play() — включение
автообновления.two.pause() — временная остановка
автообновления.two.update() — ручная перерисовка
сцены.two.bind('update', callback) —
обработчик обновления кадров при автообновлении.two.unbind('update', callback) —
удаление обработчика.Эти инструменты позволяют гибко управлять рендерингом, анимацией и оптимизацией сцены.