Добрый день) Проблема скорее всего в том, что по-умолчанию очистка идёт через «boundingRectangle» фигуры.
Попробуйте добавить в ваш класс такой код и скажите, исправился ли баг?
clearPrevious: function (ctx) {
ctx.clear( this.shape );
}
Как альтернатива — заменить boundingShape:
get currentBoundingShape () {
return this.shape;
}
По идее любой из этих способов должен помочь.
С точки зрения производительности вместо projectiveImage, который реализуется через множество трансформаций — лучше использовать одну трансформацию. Например, как в топике "
Canvas-трансформации доступным языком".
А ещё лучше — загружать уже транформированные картинки (так и дизайнеру легче, имхо). Пример из Civilization3: