Я написал учебник по вашей первой ссылке.
Просто чтобы очистить воздух:
shapeCanvas.style.width = w + 'px';
shapeCanvas.style.height = h + 'px';
на самом деле не стоит делать. Нет смысла устанавливать стиль, если это просто холст в памяти, и вам не стоит устанавливать ширину и высоту стиль холста, он просто запутывает вещи.
То, что Эллисббен сказал в комментарии, в значительной степени соответствует тому, что происходит.
Бьюсь об заклад, можно обойти это несколькими хитрыми способами. Один из способов - убедиться, что он никогда не нарисован на целочисленном пикселе. Другим может быть использование ctx.scale(.99,.99)
перед рисованием чего-либо, чтобы оно всегда было сглаженным. Здесь сложно получить согласованное решение, потому что разные реализации сглаживания в разных браузерах различаются.
Вот несколько экспериментов от меня:
http://jsfiddle.net/KYZYT/29/
Первые два - это фигура, нарисованная из холста, а также из PNG
Вторые два - это та же пара, но масштабированная на .99,.99
Последний из них настоящий. Это все еще немного размывает, но выглядит намного резче, чем при использовании изображений.
Ни один из моих экспериментов не привел к прекращению вашей пульсации, по крайней мере, на микроскопическом уровне. Я думаю, что это то, с чем вам придется смириться, если вы хотите анимировать пиксельно-совершенные изображения на полупиксельные пространства.
Если вы действительно чувствуете, что не можете просто рисовать на идеальных пикселях, то ваш (второй) лучший вариант для согласованности - это, вероятно, постоянно находить способ принудительного сглаживания. Убедиться, что вы всегда переводите в нецелое число или слегка его масштабировать, - достойные кандидаты, но могут быть и другие.
Если честно, лучше всего не кэшировать эти анимированные пути до тех пор, пока вам не понадобится их производительность. Кэшируйте стилизованные кнопки и другие статичные вещи, которые вы делаете, но если у вас есть анимированные контуры, которые нужно медленно и точно перемещать и выглядеть очень хорошо, вы могли бы также придерживаться верной вещи по поводу моей оптимизации кэширования, если вы не действительно он нужен и для тех.