PaperScript — это расширение JavaScript, созданное специально для
библиотеки Paper.js, которое позволяет писать графику и анимацию в более
декларативном и лаконичном виде. Для использования PaperScript
необходимо подключить библиотеку Paper.js в HTML и назначить скрипт с
типом text/paperscript:
<script type="text/paperscript" canvas="myCanvas">
var circle = new Path.Circle({
center: [100, 100],
radius: 50,
fillColor: 'red'
});
</script>
<canvas id="myCanvas" resize></canvas>
Ключевой момент: атрибут canvas
связывает скрипт с конкретным HTML-элементом
<canvas>. В PaperScript не требуется явно получать
контекст canvas через getContext('2d') — все операции
происходят автоматически через Paper.js.
Point представляет координаты на плоскости. Используется
для задания положения элементов, смещения и вычислений.
var p1 = new Point(50, 50);
var p2 = new Point(200, 100);
var vector = p2 - p1; // Вектор между точками
Особенности:
+, -,
*, /).add(), subtract(),
multiply(), divide(), length,
normalize().[x, y] вместо объекта
Point.Path — основной строитель геометрических фигур.
Позволяет создавать линии, кривые и замкнутые контуры.
var path = new Path();
path.strokeColor = 'black';
path.add(new Point(50, 50));
path.add(new Point(150, 50));
path.add(new Point(100, 100));
path.closed = true; // замыкает фигуру
Ключевые методы Path:
add(point) — добавляет точку к пути.removeSegment(index) — удаляет сегмент.smooth() — сглаживает углы.length — длина пути.position — центр пути.Также доступно создание стандартных форм через конструкторы:
Path.Circle(center, radius)Path.Rectangle(from, to)Path.Ellipse(bounds)Объект Raster используется для работы с
изображениями:
var raster = new Raster('image.jpg'); // загрузка по URL
raster.position = view.center;
raster.scale(0.5);
Особенности:
scale(), rotate(),
translate() изменяют изображение.opacity задает прозрачность.raster.getPixel(point) позволяет получать цвет
конкретного пикселя.PaperScript предоставляет удобное API для работы с цветами и стилями:
var circle = new Path.Circle([100, 100], 50);
circle.fillColor = 'blue';
circle.strokeColor = 'black';
circle.strokeWidth = 5;
circle.opacity = 0.6;
Форматы цвета:
'red', 'rgba(255,0,0,0.5)'new Color(r, g, b, a)Gradient, GradientStop,
используются в fillColor или strokeColor.viewview — это глобальный объект, представляющий текущий
холст. Через него можно управлять размерами, анимацией и
трансформациями.
console.log(view.size); // Размер canvas
view.onFr ame = function(event) {
path.rotate(1); // Анимация: вращение пути каждый кадр
};
view.center — центр холста.view.bounds — прямоугольная граница холста.view.onFrame(event) — вызывается каждый кадр анимации,
объект event содержит count и
time.PaperScript интегрирует обработку событий без необходимости использовать DOM напрямую:
function onMouseDown(event) {
var circle = new Path.Circle(event.point, 20);
circle.fillColor = 'green';
}
function onMouseDrag(event) {
var path = new Path();
path.strokeColor = 'black';
path.add(event.lastPoint);
path.add(event.point);
}
Особенности:
event.point — координаты события на холсте.event.delta — вектор смещения при перетаскивании.onKeyDown(event) и onKeyUp(event) для
работы с клавишами.Group объединяет несколько элементов для совместной
трансформации:
var group = new Group([circle, path]);
group.position = view.center;
group.rotate(45);
group.children — доступ к элементам внутри группы.group.bounds, group.position аналогичны
Path.Layer позволяет управлять порядком отображения
объектов:
var layer1 = new Layer();
var layer2 = new Layer();
layer1.addChild(circle);
layer2.addChild(rectangle);
layer2.activate(); // Все новые объекты попадут в layer2
onFrameАнимация в PaperScript строится через функцию onFrame,
которая вызывается каждый кадр (~60 fps по умолчанию):
var ball = new Path.Circle([50, 50], 20);
ball.fillColor = 'orange';
var velocity = new Point(2, 3);
view.onFr ame = function(event) {
ball.position += velocity;
if (ball.bounds.right > view.size.width || ball.bounds.left < 0) velocity.x *= -1;
if (ball.bounds.bottom > view.size.height || ball.bounds.top < 0) velocity.y *= -1;
};
event.delta — время с предыдущего кадра, полезно для
физики.position, rotation,
scale) могут быть изменены динамически.PaperScript содержит ряд вспомогательных объектов и функций:
project.activeLayer, project.clear()).canvas.getContext('2d').new paper.Point(), если включен PaperScript.onFrame, onMouseDown,
onMouseDrag, onKeyDown.PaperScript обеспечивает лаконичное и декларативное описание векторной графики, позволяя сосредоточиться на логике рисования и анимации, избавляя от рутинной работы с DOM и контекстом canvas.