- Переведите контекст в точку на холсте, вокруг которой должен вращаться объект.
- Поворот контекста.
- Либо:
- Переведите контекст на отрицательное смещение внутри объекта для центра вращения, а затем нарисуйте объект на
0,0
или
- Нарисуйте изображение, используя отрицательное смещение внутри объекта для центра вращения.
например.
ctx.save();
ctx.translate( canvasLocX, canvasLocY );
ctx.rotate( ballRotationInRadians );
ctx.drawImage( ball_img, -ballCenterX, -ballCenterY );
ctx.restore();
Обратите внимание, что если вам нужна абсолютная скорость, вместо сохранения и восстановления холста (обработки многих свойств, которые вы не изменили), вы можете просто отменить свою работу:
ctx.translate( canvasLocX, canvasLocY );
ctx.rotate( ballRotationInRadians );
ctx.drawImage( ball_img, -ballCenterX, -ballCenterY );
ctx.rotate( -ballRotationInRadians );
ctx.translate( -canvasLocX, -canvasLocY );
Предыдущий бит преждевременной оптимизации был слепо отобран у кого-то другого; Я лично не проверял, чтобы убедиться, что это правильно.
Редактировать : Я добавил макет рабочего примера этого здесь: http://phrogz.net/tmp/canvas_beachball.html