Comunidad de diseño web y desarrollo en internet online

hacer undo / redo múltiple

Citar            
MensajeEscrito el 19 Ago 2011 09:31 am
Hola gente.

No sé si este es el mejor lugar para postear esto, pero ahí va.

Estoy haciendo una aplicación en flash CS5.5 y AS3. Consiste en tener varias imágenes en una especie de biblioteca, situada en el lado derecho de la pantalla, que puedes arrastrar a una especie de lienzo, situado en el lado izquierdo.

Una vez en este lienzo, las imágenes se pueden mover por él, rotarlas, escalarlas, duplicarlas, borrarlas, etc.

La cuestión es que el cliente quiere que la aplicación pueda tener la opción de deshacer/rehacer (undo/redo) múltiple, esto es, que se puedan deshacer o rehacer todas las acciones realizadas con los dibujos (o por lo menos unas cuantas, como 5 ó 10, si es demasiado complejo hacerlas indefinidas).

El problema es que no se me ocurre cómo abordar este tema.

¿A alguien se le ocurre cómo puedo solventar el problema?

Gracias

Por CidDeMizar

81 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Ago 2011 12:48 pm
Pues mira, ahora que estoy metido en el mundo de los Patrones de Diseño, te recomiendo que utilices el patrón Memento, que permite, precisamente, implementar el Deshacer. Aquí tienes algo de información sobre él:

Memento (patrón de diseño)

Yo todavía no lo he visto con calma, pero espero que te sirva. Si no sabes qué son los patrones de diseño, te dejo unos enlaces a un par de tutoriales que he hecho sobre ellos:

Introducción a los Patrones de Diseño
Patrones de Diseño Creacionales

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 19 Ago 2011 02:17 pm
Agregando a lo de Nestorrente, a quien felicito por los tutoriales. Memento en general es una forma de referirse a guardar el estado de un sistema ... el tema es que usar patrones implica un niovel de abstracción y planeamiento desde el vamos que no siempre se tiene. De todas formas, se suele complementar con otro (en términos de patrones sería el Comand, aunque no lo tengo de memoria) en donde puedes encapsular una acción en un comando específico, así tienes los dos componentes que necesitas> estado + acción.

Llevado a la práctica, suele ser un queue ( Array lifo, last in first out) en donde cada vez que haces una cosa metes una entrada que dice que se hizo y como cambió el estado con esa acción. Si fuera que arrastraste un elemento de la biblioteca al escenario, pues la acción puede ser crear (lo importante de la acción es que sepas que significa y lo puedas reproducir) y el estado es la posición _x e _y del elemento, mas el identificador del elemento mismo. Deshacer significa (cada acción debe tener un opuesto) borrar y ahí solo necesitas el identificador del elemento, pero para rehacer las posiciones _x e _y si te serán útiles.

En fin, si tu aplicación sigue una estructura ordenada (sigue un patrón si quieres decirlo así) no será muy complicado, pero sino ... suerte !!

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos



Ultima edición por solisarg el 19 Ago 2011 05:54 pm, editado 1 vez

Argentina

firefox
Citar            
MensajeEscrito el 19 Ago 2011 04:08 pm
Sí, Jorge, creo que el Memento se suele complementar con el Command. De todos modos esos son 2 patrones que no he llegado a utilizar, por eso tampoco sé seguro si sirven para el propósito de CidDeMizar.

De todos modos, tu segundo párrafo plantea la solución al problema de forma correcta. Probablemente eso ayude a que CidDeMizar se oriente un poco.

Por cierto, agradezco las felicitaciones :)

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 19 Ago 2011 09:58 pm
Gracias a los dos. Echaré un vistazo a los patrones de diseño. De todas formas, me temía que sería algo parecido a lo que comenta Jorge en su segundo párrafo. Normalmente sí suelo intentar ser estructurado y ordenado, aunque no siempre lo consigo. así que me veo haciendo arrays como loco para guardar los estados, a no ser que me sirva lo de los patrones.

Gracias a los dos por vuestra ayuda.

Por CidDeMizar

81 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Ago 2011 10:11 pm
Me he estado mirando lo de los patrones y creo que me supera. Intentaré hacerlo "a mano" guardando los estados en los arrays.

Gracias a los dos de nuevo.

Por CidDeMizar

81 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.