2012-01-26 3 views
5

У меня есть холст, который имеет несколько линий, нарисованных движением мыши. Я хочу, чтобы линия продолжалась всего несколько секунд, прежде чем удалять себя. Немного похоже на кручение ленты вокруг, где она имеет заданную длину. Я использую lineTo, чтобы нарисовать линии на холсте. Я отсылал немного кода отсюда.Очистка javascript canvas lineto с пересекающимися линиями

Проблема

я могу очистить линию с помощью clearRect(), но это буквально очищает все, и проблема заключается в том, что если линия пересекает она очищает пересекающаяся область тоже. вот мой Fiddle нажмите и перетащите в правом нижнем окне:

http://jsfiddle.net/m2K5h/

ясно Прямоугольник бы мне это: enter image description here

В сводке

clearRect просто стирает все, я хотите динамически «оттянуть» линию, чтобы она имела целую жизнь. И я не могу для жизни меня найти что-то сделать ...

Любая помощь будет потрясающей !!!!

+0

для записи: вы никогда не должны делать что-то вроде этого: 'brush = eval (" new "+ BRUSHES [0] +" (context) ");' eval вообще злой, почти ничего не может быть обойтись без использования eval. приведенный выше пример эквивалентен 'brush = BRUSHES [0] (контекст)' – zaphod1984

+0

Да, я ссылался на источник откуда-то, где было много разных кистей. Там много очистки кода и переписывания, которые я делаю. Эваль спас мой бекон несколько раз, я должен сказать. – Alex

ответ

8

Холст - это растровая поверхность. Ничто в холсте не может указывать на то, что ваша линия пересекла себя, отличную от значений пикселей.

Для того, чтобы линия вытягивалась сама, вам нужно сохранить все координаты линии по мере ее нарисования. Когда настало время для того, чтобы линия могла оттянуть себя, вы начинаете анимацию, где каждый кадр очищает холст и перерисовывает сокращающуюся часть линии.

jsfiddle example

Если у вас есть что-нибудь еще существенной сложности, что вы не хотите, чтобы стереть и быстро перерисовать, положить, что во втором полотне за первым.

+0

Голосование! Хорошая ссылка, очень полезно, вот что мне нужно. В общем, я массивный ненавистник многослойных полотен. Тем более, что это всего лишь один слой действительно сложного структурированного проекта DOM, поэтому мне нужно как можно больше держать DOM накладные расходы. – Alex

Смежные вопросы