Ответ 1
Ваша настоящая проблема заключается в том, что вы не закрываете свой круг.
Добавьте ctx.beginPath()
, прежде чем рисовать круг.
Кроме того, некоторые советы...
- Ваши активы не должны нести ответственность за рисование (метод
draw()
). Вместо этого, возможно, определите их визуальные свойства (это круг? Радиус?) И пусть ваша основная функция рендеринга обрабатывает конкретный рисунокcanvas
(это также имеет то преимущество, что вы можете переключать рендеринг на обычные элементы DOM или WebGL дальше по дорожке легко). - Вместо
setInterval()
используйтеrequestAnimationFrame()
. В настоящий момент поддержка не такая уж большая, поэтому вы можете подделать ее функциональность с помощьюsetInterval()
или рекурсивного шаблонаsetTimeout()
. - В вашем
clearRect()
должны быть указаны размеры из элементаcanvas
(или их определить где-то). Включение их в ваши функции рендеринга сродни магическим числам и может привести к проблеме обслуживания дальше по дорожке.