HOME

Estructura de un juego

Pantallas

Un juego se ve, desde el punto de vista del jugador, como una sucesión de pantallas: la pantalla del menu, la de la acción, la de los resultados, etc.

En Xitai Editor cada pantalla es un objeto de la clase Widget (o derivada), cuyos hijos son, a su vez, widgets.

Los widgets son áreas rectangulares en los que se pueden representar, dinámicamente, una gran variedad de contenidos. Generalmente el rectángulo ocupado por un widget está contenido en el rectángulo del padre. Aunque no siempre es así.

Hay clases específicas de widgets que sirven para diversos propósitos: botones, conmutadores, textos simples o complejos, imágenes, listas, tablas, composiciones complejas a partir de modelos, etc. Cuando queremos que un widget tenga algún comportamiento peculiar, podemos asociarle una máquina de estados (clase WidgetMachine).

A los widgets se les puede dar una apariencia gráfica arbitraria mediante los objetos de clase Style y derivadas.

Las transiciones de una pantalla a otra están gobernadas por una máquina de estados de la clase GlobalMachine. Dicha máquina utiliza la información de estado del juego o señales enviadas por diversos objetos activos para decidir cuándo cambiar de pantalla. También puede ser responsable de la inicialización de algunas variables, gestión de la música, adaptación de la visibilidad de widgets, y otras tareas generales.

Textos

Algunas clases de objetos tienen atributos de tipo texto. Algunos de estos textos son dependientes del idioma establecido como actual en el juego. Se pueden definir todos los idiomas que se desee y se puede cambiar de idioma en cualquier momento. Todos los textos visibles se mostrarán automáticamente en ese idioma.

Se pueden insertar valores derivados en los textos con ayuda de un sencillo lenguaje de plantillas que permite, además, generación de listas e inserción condicional (clase MicroTemplate).

Para el despliegue de contenidos con múltiples tipografías, colores, recuadros, formato de párrafos flexibles, imágenes o animaciones incrustadas, etc. existe un modo de codificación del texto que es soportado en el widget RichTextWidget.

Para facilitar esta tarea se pueden definir diferentes estilos de texto y párrafo y asignarlos a etiquetas de xml con los que definimos así diferentes traductores de estilo para diferentes usos (clase XMLStyleParser).

Mundos

Un mundo es un objeto de clase derivada de World, que contiene el armazón visual y los elementos activos (actores) que constituyen la acción del juego. pueden tener asociada una máquina de estados (clase WorldMachine).

Hay una clase de widget muy importante que es WorldWidget. Es aquí donde se representa la acción. Cada WorldWidget representa un mundo.

Puede haber varios WorldWidget que representen el mismo o diferentes mundos. Cada WorldWidget puede tener sus opciones de representación distintas y su propia cámara (gestor del punto de vista). La cámara puede estar asociada a un actor y cambiar el punto de vista dependiendo del movimiento de dicho actor.

Escenarios

Cada objeto World puede tener asociado un escenario (objeto de clase Stage), que puede usarse para desarrollar la parte interactiva del juego, o como decoración.

Los escenarios definen el estado inicial del mundo donde se desarrolla la acción, a partir del cual evoluciona mediante la creación, destrucción y actividad de los actores.

Están constituidos por un número indeterminado de capas de distintas clases (derivadas de Layer), que describen el aspecto visual, las propiedades físicas, los actores iniciales, y otros elementos auxiliares, como nodos y caminos.

Actores

Cada actor es una instancia de un modelo: el personaje (Character). Los actores pueden desaparecer o crear otros actores durante la acción. Cada actor puede tener un dueño (owner), que es por defecto el actor que lo creó. Con el owner pueden establecerse algunas ligaduras.

Los actores suelen tener asociada una máquina de estados que definen su comportamiento (clase ActorMachine). Esta máquina es una instancia privada de cada actor.

Hay diferentes tipos genéricos de personajes, por ejemplo: sin física, con física, con restricciones, sistemas de partículas, cámaras, indicadores, etc. La representación gráfica de los actores puede variar:

Escenas

Los niveles del juego se implementan en Xitai Editor mediante objetos de clase Scene. La escena es un concepto muy general, se puede cambiar de escena en cualquier momento mediante las máquinas de estados.

Usando clases derivadas y mediante expresiones la escena puede definir los escenarios que se usarán y las capas opcionales activas de cada escenario. Se pueden representar distintas escenas en los mismos escenarios o modificar la dificultad.

Las escenas se pueden agrupar para delimitar mundos o superniveles (SceneGroup). Los hijos de las escenas son los portales, (clase Portal) que definen los lugares de comunicación, o teletransporte, entre escenas.

Los personajes declarados singulares pueden moverse entre escenas conservando su estado general.

Variables de estado

Algunos atributos de los objetos pueden hacer referencia (directamente o mediante expresiones ) a otros atributos del mismo objeto o de otros. Es una manera de reutilizar valores y, mediante acciones de máquina de estados, manipular los valores de algunos atributos. Estos atributos son lo que se conocen, generalmente, como variables de estado.

Hay tres clases esenciales para el manejo de estos datos:

Data
Es una clase de objeto cuya única intención es la de ser extendida con atributos nuevos. Puede tener como hijos otros objetos de clases Data, Collection o HandleSet.
Collection
Maneja una lista de objetos con un valor para cada uno. Hay acciones y condiciones de las máquinas de estados para manipular dicha lista. Es muy útil para mantener inventarios o aplicar diversas técnicas de inteligencia artificial.
HandleSet
Son listas de handles. Los handles son identificadores de actores o nodos de un escenario. Un HandleSet puede almacenar resultados de la creación de actores, búsqueda de caminos o selección de áreas del escenario.

Interacción

La interactividad se realiza mediante el teclado, ratón, controlador de juego o pantalla táctil.

Objetos de clase DiscreteInput nos permiten definir hasta 32 entradas discretas, que pueden representar teclas, pulsadores, botones del ratón o áreas sensibles de la pantalla.

Para entradas de valores dentro de un rango, como los joysticks, existe la clase AnalogInput, que puede ser configurada para obtener su valor de joysticks del mando de juego o sintetizado a partir de toques de pantalla.

También son accesibles en todo momento las coordenadas del último toque en pantalla táctil o de la posición del cursor del ratón en el aributo touch_position de World2D.

Existe una variedad de métodos de utilización de estas fuentes de información en condiciones de máquinas de estados.

Comunicaciones

Hay diversos mecanismos de comunicación entre objetos del juego o con el mundo exterior.

Mensajes
Se pueden envíar mensajes a actores concretos o a una selección de actores según ciertos criterios. Estos mensajes constan de un valor simbólico (declarado en Symbols/Messages) y un número.
Señales
Las señales son emisiones sin destinatario predeterminado. Son objetos de clase Signal y pueden recibirlas todos los objetos interesados en ellas. Cada señal puede contener un número y una referencia a un objeto.
Canales
Un canal es un objeto que sirve para enviar o recibir otros objetos, con hijos incluidos. Los tipos de objeto enviados están limitados a la clase Data y derivadas. Estos, a su vez pueden contener referencias a imágenes. El objeto es recibido como copia temporal del original enviado. El canal de tipo DataPipe envía y recibe objetos dentro del juego. El de tipo HttpRequest puede usarse para comunicarse con un servidor web externo mediante Internet. El conector del servidor de juegos (GameServices), es también un canal que puede usarse para enviar y recibir objetos de clase Data
Partidas multijugador
La clase MatchStatus permite la creación y gestión de partidas de varios jugadores. esta clase contiene los participantes (Participant).

Persistencia

En la rama Persistence del sistema de objetos residen aquellos que pueden conservar el valor de sus atributos variables entre ejecuciones del juego.

Estos datos se respaldan en el sistema de archivos local o en un servidor de juegos accesible por Internet.

Se recuerdan automáticamente:

En objetos de clase Slot puede guardarse, mediante acciones de máquina de estados, el estado general actual del juego, incluido el estado del escenario actual y los actores marcados como persistentes.

Paquetes

Cuando desarrollamos un juego es habitual que mantengamos varias versiones al mismo tiempo. Pueden ser, por ejemplo, adaptaciones a distintas plataformas, demos, premium, distribuciones por entregas, etc.

En Xitai Editor lo gestionamos mediante el objeto de clase Package. Podemos definir todos los que queramos, pero sólo uno se incluye en cada distribución final concreta.

Estos objetos contienen atributos que definen el tipo de plataforma y sus características específicas, la resolución preferida de la ventana, una referencia a la máquina de estado global y otros parámetros que sirven para filtrar las entradas de datos o las escenas permitidas en la distribución. (Sólo se exporta al paquete final el contenido que se use).

Así mismo, podemos crear clases derivadas de Package para incorporar nuestras propias opciones.

Las diferentes máquinas de estados de la aplicación pueden consultar los atributos del Package actual (mediante la conexión de atributos por contexto) para adaptarse a sus particularidades.

Es obligatorio que el proyecto contenga al menos un objeto de esta clase o derivada, para poder construir una distribución del juego que se pueda publicar y ejecutar fuera del editor.

 
Expresiones   Interface de usuario


(C) Mandanga Games. 2016.
Xitai Engine Wiki