Проблема вызвана тем, что переменная angle
объявляется локальной и инициализируется 0 в каждом кадре.
Переместите объявление переменной в глобальную область. Например:
let angle = 0;
function draw() {
// [...]
if (mouseIsPressed) {
angle = atan2(mouseY - height / 2, mouseX - width / 2);
}
// [...]
}
Расширение в соответствии с комментарием.
как я могу начать перетаскивание снова из своей конечной позиции
Использовать mouseReleased()
обратный вызов события для управления углом. Добавьте постоянный угол и текущий угол:
let permanent_angle = 0;
function mouseReleased() {
let angle = atan2(mouseY - height / 2, mouseX - width / 2);
permanent_angle += angle;
}
function draw() {
// [...]
let current_angle = 0;
if (mouseIsPressed) {
current_angle = atan2(mouseY - height / 2, mouseX - width / 2);
}
translate(width / 2, height / 2);
rotate(permanent_angle + current_angle);
translate( -width / 2 + 20, -height / 2 +20 );
// [...]
}