Objetos e inventario, Adventure Game Studio

03 de noviembre de 2008
Valoración del artículo:
A continuación vamos a ver como crear un inventario, con objetos de distintos tamaños.
Atención: Contenido exclusivo de DesarrolloMultimedia.es. No reproducir. Copyright.

Objects - Objetos

Los objetos son elementos presentes en pantalla que a diferencia de los hotspots, se pueden mover, cambiar y desaparecer. Los objetos se suelen usar para crear cosas que el personaje podrá coger (desaparecerán de la pantalla y pasarán al inventario, algo que no se puede hacer con los hotspots) y para cosas que necesites animar.

Vamos a usar uno de los elementos tradicionales de los juegos de aventura gráfica, una llave. Vamos a imaginar que tenemos una puerta cerrada que se puede abrir con una llave que el jugador debe coger en otra estancia. Por favor, cuando crees tu juego, intenta evitar este puzle, es algo que se ha repetido hasta la saciedad en este tipo de juegos, se original ;-) 

Ve a la lista desplegable que ya conoces, donde hemos seleccionado "Walkable areas" y "Hotspots" en partes previas de este tutorial, y selecciona Objects Ahora vamos a añadir un objeto a la estancia. Simplemente haz clic derecho sobre el fondo en la posición donde quieras añadirlo y elige "New object here" del menú.

Y por arte de magia, una taza azul aparecerá en la pantalla. No te asustes, este es el sprite usado por defecto en AGS y aparecerá hasta que asignes la imagen que desees para dicho objeto. Fíjate que la rejilla de propiedades ha cambiado para mostrar los detalles del nuevo objeto, uno de los cuales se llama Image. Selecciona esta propiedad, Image, y aparecerá el botón “…” a su lado.

Añadiendo un objeto a la estancia


Haz clic en el botón "..." y AGS te llevará al Sprite Manager (Administrador de Sprites). Explicaremos sus funciones en detalle más adelante, pero básicamente se trata de la parte de AGS donde gestionas (importas y exportas) todos tus gráficos excepto los fondos de estancia. Deberías ver una pequeña imagen de una llave con el nombre sprite number 2. Haz doble clic sobre ella, más adelante importaremos nuestros propios gráficos.

Fíjate en que la taza azul ha pasado a ser una llave. Puedes moverla por la pantalla haciendo clic sobre ella y arrastrando el sprite por el fondo. Sitúala en algún lugar accesible al jugador (es decir, un área transitable, no coloques nunca los objetos en zonas a las que el jugador no pueda llegar).

Ahora debemos asignarle un nombre a este objeto. Tenemos que buscar un nombre adecuado ya que tenemos que hacer referencia a este objeto dentro del script al igual que lo hicimos con los hotspots. Busca dentro de la rejilla de propiedades la opción "Name" y escribe un nombre adecuado. La convención usada en AGS es que los nombres de objetos empiecen con la letra “o”, por ejemplo oKey (en nuestro caso también podríamos usar nombres como oLlave, oEspada).

Astutamente, he colocado la llave en medio del camino ;-)


Antes de que hagamos que la llave pueda ser recogida por el jugador, déjame que te explique brevemente un par de elementos de la rejilla de propiedades:

  • Baseline – Normalmente la línea base para cualquier objeto, suele ser la parte más baja del gráfico (por si no lo recuerdas, las líneas base se usan para calcular que elementos deben ser dibujados por encima o por debajo del fondo de la estancia dependiendo de su posición en pantalla). Puede que en algún caso en espacial quieres saltarte esta regla.
    Lo que sucederá con nuestra llave es que cuando el jugador camine sobre ella, esta permanecerá delante de sus pies. No queremos que pase esto, ya que se supone que la llave esta tirada en el suelo. Para corregir este efecto deberás cambiar el valor de Baseline dentro de la rejilla de propiedades, por un valor de 5 (Esto significa que ese objeto se dibujará detrás de cualquier otro elemento que tenga una Línea Base en pantalla mas baja que la coordenada Y=5). Con esto nos aseguramos que el jugador siempre aparecerá dibujado encima de la llave.
  •  Visible – Esta opción hace que el objeto sea visible desde el comienzo del juego. En nuestro caso queremos que la llave sea visible, pero cuando desarrolles tus propios juegos, puede que no quieras que un objeto aparezca hasta que el jugador halla realizado cierta acción.




Y ahora, vamos a concentrarnos de una vez en el objetivo de todas estas divagaciones, que el personaje coja la llave.

Inventario

Espera, aun tenemos algo que hacer antes de permitir que el jugador coja la llave. Después de todo lo que hemos hecho podríamos hacer que la cogiese sin problemas, ¿Pero a donde iría esa llave? Es hora de que definamos el Inventario.

Ve al Árbol de Proyectos (Project Tree) y selecciona "Inventory Items”. Fíjate que ya hay dos elementos definidos  - "Key" y "Pink poster". Estos dos elementos están definidos por defecto para ayudarte. Haz doble clic sobre "1: iKey", y deberías ver una ventana con la imagen de la llave. Como estarás pensando, esa imagen es muy pequeña para usarla como representación del objeto en el inventario. Estoy seguro de que había algo más apropiado en la lista de sprites que vimos en el apartado anterior.

Dentro de la rejilla de propiedades busca "Image", selecciónala y pulsa el botón “…” como ya hemos hecho varias veces. Aparecerá el Administrador de Sprites (Sprites Manager). Dentro de este, busca el sprite número 5. Como podrás observar es una imagen más grande de la llave. Vamos a usar esta imagen como icono para la llave dentro del inventario. Haz doble clic sobre el sprite para seleccionarlo.

Afortunadamente tenemos una imagen más grande para la llav


Como puedes ver, hay más opciones dentro de esta ventana, pero por ahora no nos interesan, así que olvídate de ellas por ahora y vamos a centrarnos en nuestro objetivo, hacer que el personaje coja la llave. Recuerda que su nombre de script es iKey, ya que lo vamos a necesitar más adelante.

Volvemos a la lista de Events - Eventos

Vuelve hasta el panel Objects del Editor de Estancias (Room Editor), y haz clic en… ¿A qué no lo adivinas? Pues si, haz clic en el botón Events. Como podrás observar, los eventos disponibles son muy parecidos a los que teníamos dentro de los hotspots:

La lista de eventos de objeto


Fíjate en las dos posibilidades más obvias: "Interact object" (Interactuar con objeto) y "Pick up object"(Coger objeto). En esta ocasión queremos usar el evento "Interact object". Lo hacemos de esto modo por que estamos usando el interfaz de Sierra como ya sabrás no dispone de un comando específico para Coger. Los eventos "Pick up", "Usermode1" y "Usermode2" te serán muy útiles cuando crees un juego basado en el interfaz de Lucasarts que usa más comandos verbales del tipo Mirar, Coger, Usar, etc.…. 

Así que selecciona "Interact object" y haz clic en el botón "...". Queremos que ocurran dos cosas cuando el jugador coja la llave: primero, el objeto tiene que desparecer de la pantalla, y segundo, el objeto tiene que ser añadido al inventario del jugador.

Aquí esta el script que yo he usado. Como bonificación adicional, he decidido dar 5 puntos al jugador por resolver este pequeño problema, pero esto no es algo necesario y no quieres complicarte la vida con un tercer comando en el script:

El script para coger la llave

Fíjate que nuestra solución no es del todo perfecta, el jugador puede hacer clic en la llave usando el comando Interactuar (representado con un mano en el interfaz de estilo Sierra) desde cualquier parte de la pantalla y la llave pasará a su inventario sin que el personaje ande hasta ella para recogerla. Tampoco le mostramos al jugador un mensaje informándole de la acción que acaba de realizar. Pero no te preocupes, porque por ahora con esto nos vale, y más adelante puedes añadir más opciones al script.

Bueno, parece que por fin tenemos una estancia completamente funcional. Haz una prueba como ya hemos hecho anteriormente y comprueba que todo lo que has añadido funciona correctamente, Una vez que el jugador haya recogido la llave, abre su inventario y comprueba que esta dentro, si es así, todo correcto.

Opciones de Estancia - Room Settings

Por ultimo, aquí tienes una breve descripción de las diferentes opciones disponibles para configurar una estancia (disponibles seleccionado Nothing en la lista desplegable  del editor):

  • PlayMusicOnRoomLoad – Escribe un número en este campo para que se reproduzca esa música de fondo cuando el jugador entre en la estancia. Previamente habrás añadido las canciones y les habrás asignado un número. Dispones de más información sobre este tema en capítulos más avanzados del manual.
  • SaveLoadEnabled – si esta opción esta desactivada, un mensaje del tipo ("Sorry, not now" – “Lo siento, ahora no”) se mostrará si el jugador intenta guardar la partida en esa estancia.
  • ShowPlayerCharacter – si se activa esta opción el personaje no será visible en pantalla y se desactiva el modo Caminar. Esta opción es muy útil para primeros planos al observar objetos o cuando se manipulen paneles o puzles.
  • PlayerCharacterView – puedes escribir un número aquí para usar otro gráfico del personaje mientras este en esta estancia. Esto te será muy útil por ejemplo cuando muestres una perspectiva superior o un mapa, ya que no querrás que el gráfico del personaje sea el mismo que el de la perspectiva horizontal...
  • MusicVolumeAdjustment – Te permite ajustar el volumen de la música de fondo de esta estancia.

Comentarios

Los comentarios de los visitantes son para ampliar la
información del artículo. Cualquiera puede participar.

Añadir un comentario al artículo Publicar un comentario del artículo

Se muestra un comentario revisado

 Problemilla con los objetos
24/6/09 

Comentario de Bicharraco:

Hola. Primero felicitarte con el tutorial, es muy completo y me ha ayudado muchisimo, pero me da un error cuando escribo lo siguiente: funcion oDespidoarrugao_interact() { oDespidoarrugado = Visible player.AddInventory(1Despidoarrugado); } No hace falta decir que "despidoarrugado" es el objeto y que no quiero que salga la puntuación por cojerlo.
-------------------------------------------

Desarrollo Multimedia:
1- No sé si te habrás equivocado al escribir el post, o lo que tienes mal es el script, pero en vez de "funcion" hay que poner "Function".

2- Luego en la función pones;

oDespidoarrugao = Visible

En realidad es así:

oDespidoarrugao.Visible = (y aquí se pone true o false)

Defines la visibilidad (Visible) del objeto con el valor true o false, no con el valor Visible.

Creo que eso era, lo demas estaba bien;

function oDespidoarrugao_Interact()
{

oDespidoarrugao.Visible = true
player.AddInventory(oDespidoarrugao);
}

Gracias por colaborar en el portal, espero haberte sido de ayuda, Ruben Lapuerta.
-------------------------------------------




El autor
Rubén Lapuerta
Colaborador Desarrollo Multimedia
http://www.desarrollomultimedia.es
Manuales

Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...