Llamo máquinas de estados a la implementación del patrón State o State Machine ( si tenéis el libro del Gang of Four, lo podeis ver en la página 279 -ed. en castellano de Addison Wesley-, dentro del capítulo de patrones de Comportamiento, a los que yo me referí en uno de los primeros e-mails ).
El patrón básicamente consiste en que la lógica de las entidades no es un comportamiento único, sino un conjunto de estados relacionados entre sí, y que la máquina de estados se encarga de hacer transitar ( o no ) de un estado a otro. Es decir, que abstrae el comportamiento de la implementación de la entidad ( en este caso el móvil ) Ejemplo: Una pelota a una altura determinada. Su comportamiento se puede definir definiendo una serie de estados ( "estadoInicialEnPotencial", "estadoMovimiento", "estadoColisión" ). La máquina de estados puede transitar de un estado a otro ( utilizando una serie de transiciones ). En cada estado se ejecuta un callback. En este ejemplo, el primer estado tiene agregada una transición hacia el estado de movimiento. En esa transición se chequearía si la energía potencial es mayor que cero. Si lo es, transita al siguiente estado, que es el de movimiento. Ahora habría una autotransición de movimiento a movimiento, hasat que se llegue a una altura cero, en la que se transita al siguiente estado...... En fin, creo que es suficiente para coger la idea. Así se hacen los juegos AAA ( Commandos, FIFA, Quake, etc ), entre otras muchas aplicaciones. No es que no se pueda hacer de otra manera, que se puede, pero en el caso del proyecto del que he hablado desde el principio, ésta arquitectura es la que permite maximizar el código común. En este caso, da igual que sea un balón o un avión o un jugador de fútbol, lo único que me importa es que otra entidad distinta al móvil ( que es el tween manager ) me diga cual será su siguiente posición. Y mi máquina de estados se encargará de mandar al móvil que se coloque. Y habrá un mundo con su propia máquina de estados ( la lógica global del juego ) que a su vez agregará a todas las entidades del mismo. Y si alguien no lo ve claro, que piense en el FIFA programado en base a enterFrame de los jugadores. Espero que por fin, con esta explicación quede claro. Y por cierto, esto ya es entrar en filosofía de la física, pero es el mundo el que marca las leyes básicas de la física, no las entidades individuales. Si fueran las entidades individuales las que definieran su comportamiento físico, éste variaría de una entidad a otra ( no es el mejor argumento, pero es uno de los primeros que utilizó, por ejemplo Arquímedes ). Si aún seguís pensando lo mismo.... De todas formas, quiero volver a reforzar mi argumento básico, que es que la herencia a toda costa no siempre es la mejor opción. El ejemplo de las máquinas de estados es un ejemplo concreto, por supuesto, pero no es el único. Como espero que ya haya quedado claro. Oye, ¿ descansamos un poco ? César Tardáguila [EMAIL PROTECTED] -----Mensaje original----- De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] En nombre de Joseba Alonso Enviado el: domingo, 30 de mayo de 2004 19:51 Para: Lista ASNativos Asunto: Re: [ASNativos] Crear la clase Menu AS2 No se que es exactamente a lo que llamas maquina de estados. Pero moverse desde luego no es un estado, es un comportamiento. De todas maneras no creo que llegemos mas alla, pero siguiendo el ejemplo, y segun tu teoria el mundo es el encargado de mover a los animales, si un animal se tiene que mover, se lo tiene que decir al mundo para que le aplique las leyes fisicas y cambie su posicion. "oye mundo, que quiero ir al bar de la esquina" Sin embargo yo pienso que al mundo le da igual lo que se mueva o deje de moverse, son los animales los que se mueven y deben usar las leyes fisicas para hacerlo. Ellos se tienen que preocupar de las fuerzas, como la gravedad y sabiendo la masa y el volumen que tienen podran calcular la fuerza que tienen que aplicar para poder moverse en la direccion que quieren. Creo que hemos llegado a un punto muerto. Tu vas a seguir pensando lo mismo y nosotros seguiremos pensando lo contrario. Creo que no quedan mas argumentos nuevos. ¿ o si? Joseba Alonso www.sidedev.net www.5dms.com ---------------------------------- Lista ASNativos:[EMAIL PROTECTED] http://www.5dms.com/listas ---------------------------------- ---------------------------------- Lista ASNativos:[EMAIL PROTECTED] http://www.5dms.com/listas ----------------------------------