Ответ 1
Нет, beginPath
и closePath
не нужны.
Контекст canvas имеет текущий путь. Вы можете добавить инструкции к этому пути с помощью таких методов, как moveTo
и lineTo
, среди прочих. Когда вы закончите создание пути, вы можете использовать такие методы, как stroke
и fill
, которые рисуют на холсте с использованием текущего пути.
closePath
- это еще одна инструкция, которую вы можете добавить. Вы не можете заметить его эффект при использовании fill
, но при использовании stroke
он (по существу) выполнит линию в исходное положение, "закрывая путь". Сравните и сравните:
ctx.moveTo(10, 10); ctx.moveTo(10, 10);
ctx.lineTo(90, 10); ctx.lineTo(90, 10);
ctx.lineTo(90, 90); ctx.lineTo(90, 90);
ctx.closePath();
ctx.stroke(); ctx.stroke();
beginPath
, с другой стороны, отбрасывает предыдущий путь и позволяет вам начать новый. Без этого вы будете добавлять все больше и больше к предыдущему пути, что может быть нежелательным. Сравните и сравните:
ctx.moveTo(10, 10); ctx.moveTo(10, 10);
ctx.lineTo(90, 10); ctx.lineTo(90, 10);
ctx.lineWidth = 4; ctx.lineWidth = 4;
ctx.strokeStyle = "red"; ctx.strokeStyle = "red";
ctx.stroke(); ctx.stroke();
ctx.beginPath();
ctx.moveTo(10, 20); ctx.moveTo(10, 20);
ctx.lineTo(90, 20); ctx.lineTo(90, 20);
ctx.lineWidth = 2; ctx.lineWidth = 2;
ctx.strokeStyle = "blue"; ctx.strokeStyle = "blue";
ctx.stroke(); ctx.stroke();