Paper.js предоставляет мощный инструмент для работы с векторной графикой и анимацией, который позволяет создавать интерактивные эффекты с минимальными усилиями. Частицы — один из самых популярных способов оживить сцену, и Paper.js делает этот процесс гибким и удобным.
Для начала создается объект-частица, который представляет отдельный
элемент системы. В Paper.js частицы обычно реализуются через объекты
Path.Circle или Shape, чтобы легко управлять
их формой, цветом и позицией.
var particle = new Path.Circle({
center: [100, 100],
radius: 5,
fillColor: 'red'
});
Ключевые моменты:
center задает начальную позицию частицы на холсте.radius определяет размер частицы.fillColor задает цвет, который можно анимировать.Для управления движением частицы создается объект, содержащий свойства скорости и направления:
var particleData = {
velocity: new Point(Math.random() * 4 - 2, Math.random() * 4 - 2)
};
particle.data = particleData;
Point в Paper.js удобен для хранения вектора скорости,
что позволяет легко обновлять позицию частицы при каждой итерации
анимации.
Paper.js предоставляет функцию view.onFrame, которая
вызывается каждый кадр анимации. Внутри нее обновляется положение каждой
частицы:
view.onFr ame = function(event) {
particle.position += particle.data.velocity;
};
Для сложных систем можно создавать массив частиц и обновлять каждую по отдельности:
var particles = [];
for (var i = 0; i < 100; i++) {
var p = new Path.Circle({
center: [Math.random() * view.size.width, Math.random() * view.size.height],
radius: 3,
fillColor: 'blue'
});
p.data.velocity = new Point(Math.random() * 4 - 2, Math.random() * 4 - 2);
particles.push(p);
}
view.onFr ame = function(event) {
for (var i = 0; i < particles.length; i++) {
particles[i].position += particles[i].data.velocity;
}
};
Для добавления реализма к частицам можно использовать следующие приемы:
var center = view.center;
view.onFr ame = function() {
particles.forEach(function(p) {
var direction = center - p.position;
p.position += direction.normalize() * 0.5; // ускорение к центру
});
};
p.fillColor.alpha -= 0.01;
p.scale(0.98);
if (p.fillColor.alpha <= 0) p.remove();
p.position += new Point((Math.random() - 0.5) * 2, (Math.random() - 0.5) * 2);
Paper.js позволяет легко реализовать реакции частиц на движение мыши:
view.onMouseM ove = function(event) {
particles.forEach(function(p) {
var distance = event.point - p.position;
if (distance.length < 50) {
p.position -= distance.normalize() * 2; // отталкивание от курсора
}
});
};
Это создает динамическое ощущение взаимодействия и оживляет сцену.
Для больших систем частиц важно учитывать производительность:
Path для
частиц с одинаковыми свойствами.onFrame.Частицы можно сочетать с градиентами, тенями и эффектами смешивания
(blendMode):
p.fillColor = {
gradient: {
stops: ['yellow', 'red']
},
origin: p.position,
destination: p.position + [10, 10]
};
p.blendMode = 'lighter';
Это создает визуально насыщенные эффекты свечения и перемешивания цветов при наложении частиц.
Для удобства управления большим количеством частиц используется
Group:
var particleGroup = new Group();
particles.forEach(p => particleGroup.addChild(p));
particleGroup.scale(1.5);
Группы позволяют применять трансформации ко всем частицам одновременно, упрощая создание сложных эффектов типа взрывов или потоков.
С помощью этих методов Paper.js позволяет создавать гибкие, динамичные и визуально привлекательные системы частиц, которые легко адаптируются под интерактивные приложения, игры или визуализации данных.