jueves, 23 de enero de 2014

Habitify: Diseño y Arquitectura

Habitify: Diseño y Arquitectura


Metodología


Se ha desarrollado en prototipos (con un total de 7 iteraciones), tras los cuales se obtenía feedback con la compañía comprada, Habitify. En cada uno de ellos se han desarrollado diferentes características concretas, a excepción del primero, que se consiste en un proof of concept que nos ha permitido definir los requisitos iniciales (como se puede apreciar en nuestras entradas anteriores en el blog).

Arquitectura


En la siguiente imagen se puede ver un diagrama con la arquitectura general de este programa. En primer lugar tenemos el Stage, el entorno de ejecución. El Stage está compuesto por diferente Scenes. Estas Scenes serán la página principal, la página de elección de juguetes... etc. Dichas páginas tendrán un Frame Script (típciamente consistentes en un bucle continuo de ejecución de la misma escena para que el usuario se mantenga en ella) y diferentes Sprites, que son recogidos o bien en tiempo de compilación o bien en tiempo de ejecución (como se explicará más adelante). Estos están definidos por Sprite Scripts (comportamientos específicos de una instancia del elemento) o Cast Scripts (comportamientos generales de dicho elemento, y todas instancias de ese elemento comparten). Además, todos ellos están beneficiados por una serie de funciones globales generales que sirven para definir comportamientos que pueden ocurrir en cualquier escena desde cualquier script. Dichos comportamientos están en Movie Scripts y son llamados en la inicialización del programa. Esto hace que dichas funciones queden definidas y puedan ser llamadas. El principal beneficio de esta arquitectura es que permite evitar gran parte de la repetición de funciones que puede ocurrir entre diferentes scripts.

































Ejemplos

- Botones: Los botones están definidos utilizando Cast Scripts. Estos cast scripts definen tanto la acción del botón como el efecto on hover que da un efecto de profundidad. Esto funciona analizando el sprite (no el cast) sobre el que se ejecutando esa acción del ratón y reemplazándolo por otro sprite generado a través de otro cast (recurso).
- Frame Scripts: Los Frame Scripts definen los bucles de un frame (o en nuestra arquitectura, una escena). Se encargan de mantener el estado del programa. Para ello utilizan ciertas variables globales que permiten limpiar y reorganizar sprites generados dinámicamente. Por ejemplo, en la pantalla principal de generación de una habitación, tenemos lo siguiente:

 - Inicialización: La inicialización se hace utilizando movie scripts. El más importante define los diferentes canales que los sprites generados automáticamente utilizarán. Si no existieran ciertos límites, el usuario podría generar potencialmente infinitos creando un overflow. Esto además facilita la programación y el diseño general de la aplicacion, sin riesgo de que los canales se superpongan.

 - Paredes: Las paredes se seleccionan a través de una función global (setWalls) y un parámetro que depende del botón seleccionado. Su funcionamiento es sencillo: cargar la textura en alta resolución de la imagen (mismo nombre del botón pero con _orig al final del nombre para cargarlo sin necesidad de un lookup). Después, dependiendo de la perspectiva activa en el estado global de la aplicación, renderiza las paredes con el siguiente proceso:
    - Crear el sprite
    - Colocarlo en posición
    - Redimensionar el tamaño del elemento
    - Skew y rotación para adaptar la imagen a la perspectiva seleccionada


- Impresión: Esto ha causado un problema de licencias. Aunque se puede hacer una captura de pantalla e imprimir, esto requiere de un Xtra. Los Xtras no pueden ejecutarse en una versión educativa de Director. Por ejemplo, para imprimir y sacar la captura, podríamos utilizar printomatic para imprimir y ScrnXtra para capturar la pantalla. Aunque la documentación de los Xtras es clara y por licencia no se han podido hacer funcionar, se explica brevemente como sería su funcionamiento:
    - Cargar el Xtra: Utilizando la carpeta Xtras en el directorio de la aplicación con el fichero .dir
    - Realizar la captura: Utilizando ScrnXtra, llamamos a ScreenToMemberleft top right bottom (punto arriba a la izq y otro punto abajo a la derecha) memberName
    - Imprimir el cast member:
             

  set doc = new(xtra "PrintOMatic")
  newPage doc
  drawPicture doc, ourCastMember
  print doc
  set doc to void 
 

No hay comentarios:

Publicar un comentario