2012-01-26 16 views
5

Tengo un lienzo que tiene algunas líneas dibujadas por el movimiento del mouse. Quiero que la línea solo dure unos segundos antes de eliminarse. Un poco como girar una cinta alrededor de donde tiene una longitud determinada. Estoy usando lineTo para dibujar las líneas en el lienzo. Hice referencia a un poco del código desde aquí.Limpiar líneas de canvas de javascript con líneas que se intersectan

El problema

puedo borrar la línea mediante el uso de clearRect() pero esto borra literalmente todo y el problema es que si se cruza la línea que salga del área de intersección también. aquí es mi violín clic y arrastre dentro del cuadrante inferior derecho:

http://jsfiddle.net/m2K5h/

rect clara me daría esto: enter image description here

En resumen

clearRect simplemente borra todo, me quiere "dibujar" dinámicamente la línea para que tenga una vida útil. Y no puedo por la vida de mí encontrar algo para hacerlo ...

¡Cualquier ayuda sería increíble!

+0

para el registro: nunca debe hacer algo como esto: 'cepillo = eval (" nuevo "+ CEPILLOS [0] +" (contexto) ");' eval es en general malo, no hay casi nada que no se puede hacer sin usar eval. el ejemplo anterior es equivalente a 'brush = BRUSHES [0] (context)' – zaphod1984

+0

Sí, hice referencia a la fuente desde algún lugar, donde había muchos pinceles diferentes. Hay una gran cantidad de limpieza de código y reescritura que estoy haciendo. Eval ha salvado mi tocino unas cuantas veces. Tengo que decir ... – Alex

Respuesta

8

El lienzo es una superficie de mapa de bits. Nada en el lienzo podría indicar que su línea se ha cruzado a sí misma, que no sean los valores de píxel.

Para que una línea se desactive sola, debe almacenar todas las coordenadas de la línea tal como se dibuja. Cuando llega el momento de que la línea se desactive, comienza una animación en cada fotograma, borra el lienzo y vuelve a dibujar una parte de la línea que se contrae.

jsfiddle example

Si tiene cualquier otra cosa de gran complejidad que no quiere borrar y volver a dibujar rápidamente, puesto que en un segundo lienzo detrás del primero.

+0

¡Votando! buena referencia, realmente útil, eso es lo que busco. Soy un gran enemigo de los lienzos en capas en general. Especialmente porque esta es solo una capa de un proyecto estructurado de DOM realmente complejo, así que necesito mantener baja la sobrecarga de DOM tanto como sea posible. – Alex

Cuestiones relacionadas