Saltar al contenido principal

Comportamientos

Un comportamiento es una pieza de juego ya hecha que le pones a un objeto: ir y venir, perseguir a otro, andar y saltar con los controles, tener vida, crear enemigos… No escribes código: al compilar, el editor lo convierte en código JARU de la sala.

Hay doce, en tres grupos: siete de movimiento, cuatro de juego y el spawner. Un objeto puede llevar varios, pero solo uno de cada.

Si haces una plantilla de un objeto, la plantilla se lleva sus comportamientos tal como estén en ese momento. Cada copia que crea un Spawner o una regla sale con ellos.

El inspector de un guardia con sus comportamientos Patrol y Follow / flee

Añadir, quitar y apagar​

Elige un solo objeto, en el lienzo o en el árbol de la sala. En el inspector, pestaña Object, la sección INSTANCE tiene el apartado COMPONENTS con el botón + Add behaviour....

  1. Pulsa + Add behaviour.... Se abre la lista de comportamientos.
  2. Elige uno. En cada fila, a la derecha, sale su grupo: MOVEMENT, GAMEPLAY o SPAWN. Al lado de la lista, qué hace y sus ajustes con el valor por defecto (SETTINGS). Si no va a funcionar en ese objeto, lo avisa ahí mismo.
  3. Pulsa Add, haz doble clic o pulsa Intro.

En la caja Search puedes escribir parte del nombre o del grupo. Esc cierra la lista sin añadir nada.

La lista solo ofrece lo que el objeto puede llevar:

  • Lo que ya lleva no vuelve a salir.
  • En una imagen, una forma o una zona solo salen Show a variable y Spawner: los demás piden un sprite.
  • No se puede añadir nada a una ruta (le pones Follow route al objeto que la recorre), a un objeto de decorado ni con varios objetos elegidos.
La ventana Add behaviour, con Patrol elegido y sus ajustes

Las tarjetas​

Cada comportamiento del objeto es una tarjeta, debajo del botón:

  • La cabecera lleva su nombre. Púlsala para plegar o desplegar la tarjeta.
  • Debajo van sus ajustes, en dos columnas: Setting y Value. Escribe el valor o elígelo de la lista.
  • En los ajustes que solo tienen unas opciones fijas, como Axis o Enabled, elige siempre de la lista: también admiten lo que escribas, y un valor que no está en ella no da error. El juego usa entonces el de serie, y en los de true o false, false.
  • Los números admiten coma o punto decimal. Si escribes algo que no es un número, se usa el valor por defecto y el panel de problemas lo avisa.
  • La x de la cabecera quita el comportamiento. Se deshace con Undo (Ctrl+Z).

Caben cuatro tarjetas. Con cinco comportamientos o más, el quinto no se ve: mira Problemas conocidos.

Si Platform control no va a funcionar, la cabecera lo dice detrás del nombre: (physics off) si la sala no tiene física, o (needs Dynamic body) si el cuerpo del objeto no es Dynamic.

Encendido o apagado​

Casi todos tienen el ajuste Enabled:

  • true (por defecto): empieza encendido.
  • false: empieza apagado. Conserva sus ajustes, y una regla o un estado lo pueden encender durante el juego.

Apagado, un comportamiento no hace nada, pero sigue en el código del juego. Para quitarlo del todo, quítalo con la x.

Show a variable y Animation no tienen Enabled: siempre están encendidos.

Lo que dibujan en el lienzo​

Con View › What the behaviours do encendido (lo está por defecto), el lienzo dibuja lo que hará cada uno:

  • Patrol y Sine wave: el recorrido, con una marca en cada extremo.
  • Follow route: la ruta, con sus puntos numerados.
  • Follow / flee: una línea hasta el objetivo y, si tiene Stop within (px), su círculo.
  • Spawner: su zona y el nombre de la plantilla.
  • Destroy when it leaves: el borde de la sala más el margen.
  • Linear motion: lo que avanza en un segundo.

Si falta algo, sale en rojo junto al objeto: route?, target?, zone? o template?.

El lienzo con lo que hace cada comportamiento: la patrulla, la ruta, la persecución y la zona del spawner

Comportamientos de movimiento​

Los siete mueven el objeto, y todos piden un objeto con sprite.

Con física y sin física​

Cómo mueven el objeto depende de si la sala tiene física (pestaña Room, PHYSICS, Enabled):

  • Sin física, le cambian la posición en cada fotograma. Patrol, Follow / flee y Top-down control se paran en las celdas sólidas del mapa de colisión; Linear motion, Follow route y Sine wave lo atraviesan.
  • Con física, Linear motion, Patrol, Follow route, Follow / flee y Top-down control le ponen la velocidad, y lo mueve el motor de física. Entonces importa el cuerpo del objeto (Body):
BodyQué pasa
Visual o StaticNo se mueve. El panel de problemas lo avisa.
KinematicSe mueve y no cae. El mapa de colisión no lo para: solo frena a los cuerpos Dynamic.
DynamicSe mueve y el mapa lo para. Pero el comportamiento le pone también la velocidad vertical en cada fotograma: con gravedad, baja flotando, muy despacio. Ponle Gravity scale a 0.

Sine wave y Platform control van aparte: lo dice cada uno.

Face. Patrol, Platform control y Top-down control tienen el ajuste Face, que voltea el sprite hacia donde va:

  • no (por defecto): no lo toca.
  • the way it moves: para un dibujo que mira a la derecha.
  • the way it moves, drawn facing left: para un dibujo que mira a la izquierda.

Solo cuenta el movimiento horizontal. Parado, sigue mirando hacia donde iba.

Linear motion​

Lo mueve en línea recta, siempre a la misma velocidad: balas, nubes, una plataforma que cruza la pantalla.

AjusteQué esUnidadesPor defecto
Speed XVelocidad horizontal. Negativa, hacia la izquierda.px/s0
Speed YVelocidad vertical. Negativa, hacia arriba.px/s0
EnabledSi empieza encendido.—true
  • No se para nunca. Si tiene que desaparecer al salir de la sala, ponle también Destroy when it leaves.
  • Con la acción Create from a template y Face like it, si el que dispara mira a la izquierda, la copia nace volteada y con la Speed X cambiada de signo: la misma plantilla de bala dispara a los dos lados.
  • Cuerpo: sin física, cualquiera. Con física, Kinematic.

Patrol​

Va y viene en línea recta alrededor de donde está: el enemigo que pasea por una plataforma.

AjusteQué esUnidadesPor defecto
AxisPor dónde va y viene: x (en horizontal) o y (en vertical).—x
Range (px)Lo que se aleja a cada lado del punto de partida.px48
Speed (px/s)Velocidad.px/s40
Start towardsHacia dónde sale: forward (a la derecha o hacia abajo) o backward (a la izquierda o hacia arriba).—forward
EnabledSi empieza encendido.—true
FaceSi voltea el sprite hacia donde va. Solo en el eje x.—no
  • El punto de partida es donde está al cargar la sala; en una copia de plantilla, donde nace.
  • Da la vuelta al llegar a cada extremo. Mira dónde está de verdad: si algo lo empuja, no pierde el recorrido.
  • Sin física, una celda sólida del mapa de colisión también le da la vuelta.
  • Con física, solo los extremos: si un muro lo para antes, se queda empujándolo. Elige Range (px) para que no llegue a ningún muro.
  • Cuerpo: sin física, Visual. Con física, Kinematic.

Follow route​

Recorre una ruta punto por punto, a velocidad constante: una plataforma que sube y baja, un guardia que hace su ronda.

AjusteQué esUnidadesPor defecto
Route tagLa etiqueta de la ruta que sigue.—(vacío)
Speed (px/s)Velocidad.px/s50
At the endQué hace en el último punto: loop (vuelve al primero), pingpong (la recorre al revés) o stop (se queda ahí).—loop
EnabledSi empieza encendido.—true
  • La ruta se dibuja con la herramienta Path (6) y se le da una etiqueta en Tag.
  • Si no hay ninguna ruta con esa etiqueta, valen las zonas que la lleven: las recorre por su centro, en el orden de sus nombres (zone2 antes que zone10).
  • Sale de donde está el objeto hacia el primer punto.
  • Con menos de dos puntos no se mueve. El panel de problemas lo avisa.
  • Cuerpo: sin física, cualquiera, pero atraviesa el mapa de colisión (el panel de problemas lo avisa). Con física, Kinematic.

Follow / flee​

Persigue a otro objeto de la sala, o huye de él, en línea recta.

AjusteQué esUnidadesPor defecto
TargetEl nombre del objeto que persigue o del que huye.—(vacío)
Speed (px/s)Velocidad.px/s40
Modechase (perseguir) o flee (huir).—chase
Stop within (px)Al perseguir, a qué distancia deja de acercarse. Con 0, no se para nunca.px0
EnabledSi empieza encendido.—true
  • El objetivo es un sprite o una imagen de la sala con nombre (Name). Una copia de plantilla no tiene nombre: no puede ser el objetivo.
  • Busca el objetivo al cargar la sala. Si no está, no hace nada. Si lo destruyen, deja de seguirlo.
  • Va en línea recta y no rodea los obstáculos. Sin física, se para en las celdas sólidas del mapa de colisión y resbala por la pared.
  • Cuerpo: sin física, Visual. Con física, Kinematic.

Sine wave​

Oscila alrededor de donde está, con un vaivén suave: una moneda que flota, un pez que sube y baja.

AjusteQué esUnidadesPor defecto
AxisEje del vaivén: x o y.—y
Amplitude (px)Lo que se aleja a cada lado de su sitio.px24
Period (s)Lo que tarda una oscilación entera.s2
Phase (0..1)En qué punto de la oscilación empieza, de 0 a 1. Sirve para que varios objetos iguales no vayan a la par.—0
EnabledSi empieza encendido.—true
  • Es el único que escribe la posición directamente, sin pasar por la velocidad.
  • Apagado, se queda quieto donde esté; al volver, sigue la onda donde la dejó.
  • Cuerpo: sin física, cualquiera, y atraviesa el mapa de colisión. Con física, Visual o Kinematic; no Dynamic, porque la física lo movería a la vez.

Platform control​

El jugador de un juego de plataformas: anda a izquierda y derecha y salta con los controles del juego.

AjusteQué esUnidadesPor defecto
Speed (px/s)Velocidad al andar.px/s90
Jump (px/s)Velocidad hacia arriba al saltar. Cuanto más, más alto salta.px/s260
Control leftEl control del juego que lo mueve a la izquierda.—left
Control rightEl control que lo mueve a la derecha.—right
Control jumpEl control de saltar.—jump
EnabledSi empieza encendido.—true
FaceSi voltea el sprite hacia donde va.—no
  • Los controles son los de la pestaña Game, apartado CONTROLS. Por defecto, left y right son las flechas, y jump, la barra espaciadora.
  • Salta solo si pisa suelo, al pulsar: mantener el control no vuelve a saltar. La altura depende de Jump y de la gravedad de la sala.
  • En el aire también se mueve a izquierda y derecha.
  • Al añadirlo, si el rebote del objeto (Bounce, en Fric. / Bounce) tiene el valor por defecto, 0,5, lo pone a 0: así no bota al caer.
  • En el juego el objeto nunca gira, como con Fixed rotation.
  • Cuerpo: solo con física y Body = Dynamic. Es el único que deja la caída a la gravedad. En una sala sin física no se genera, y con otro cuerpo no se mueve: la cabecera de la tarjeta y el panel de problemas lo avisan.

Top-down control​

El jugador visto desde arriba: se mueve en cuatro u ocho direcciones con los controles del juego.

AjusteQué esUnidadesPor defecto
Speed (px/s)Velocidad.px/s80
Directions4: solo en horizontal o en vertical. 8: también en diagonal.—4
Control leftEl control del juego que lo mueve a la izquierda.—left
Control rightEl control que lo mueve a la derecha.—right
Control upEl control que lo mueve hacia arriba.—up
Control downEl control que lo mueve hacia abajo.—down
EnabledSi empieza encendido.—true
FaceSi voltea el sprite hacia donde va.—no
  • Los controles son los de la pestaña Game, apartado CONTROLS. Por defecto son las flechas.
  • Con 4, si pulsas a la vez una dirección horizontal y una vertical, gana la horizontal.
  • Con 8, en diagonal va a la misma velocidad que en recto.
  • Sin física, se para en las celdas sólidas del mapa de colisión y resbala por la pared.
  • Cuerpo: sin física, Visual. Con física, Dynamic con Gravity scale a 0, para que lo pare el mapa y no caiga. Si se te olvida, el panel de problemas lo avisa.

Comportamientos de juego​

Health​

Puntos de vida. La acción Take health away de una regla se los quita, y al acabarse, el objeto se destruye.

AjusteQué esUnidadesPor defecto
Hit pointsLos puntos con que empieza.puntos3
When it runs outQué pasa al llegar a 0: destroy (se destruye) o nothing (nada).—destroy
EnabledSi empieza encendido. Apagado, no pierde vida.—true
Hit points fromDe dónde salen los puntos: this object (los suyos) o the game health (la variable de juego health).—this object
  • Con this object, cada objeto tiene los suyos, y en cada sala empieza con Hit points.
  • Con the game health, los puntos son la variable health de la pestaña Game, que pasa de una sala a otra y se queda entre 0 y maxHealth. Hit points no cuenta. Es para el jugador: si varios objetos la usan, comparten la misma vida, y el panel de problemas lo avisa.
  • Apagarlo un rato es la invulnerabilidad de después de un golpe.
  • Actúa en cada fotograma antes que las reglas. Si una regla quita una vida al acabarse (Lose a life), pon When it runs out en nothing: con destroy, el objeto desaparece antes de que la regla le devuelva la vida. El panel de problemas también lo avisa.
  • Cuerpo: cualquiera, con física o sin ella.

Destroy when it leaves​

Destruye el objeto cuando sale de la sala: balas, enemigos que cruzan la pantalla, lo que cae por un agujero.

AjusteQué esUnidadesPor defecto
Margin (px)Lo que puede alejarse del borde antes de destruirse.px32
EnabledSi empieza encendido.—true
  • Mira la posición del objeto: lo destruye cuando se aleja del borde de la sala más de Margin (px), por cualquier lado. La sala mide lo que diga Room (px), en la pestaña Room.
  • Si al salir tiene que pasar algo más, como perder una vida, usa la regla When it leaves the room (Reglas y estados).
  • Cuerpo: cualquiera, con física o sin ella.

Show a variable​

Escribe en la pantalla el valor de una variable, con un texto delante: las vidas, los puntos…

AjusteQué esUnidadesPor defecto
VariableLa variable: una del juego (game.lives, game.score…) o una de la sala.—game.lives
LabelEl texto que va delante. Entre los dos queda un espacio.—Lives:
Colorwhite, yellow, red, green, cyan o black.—white
Fixed on screentrue: fijo en la pantalla, no se mueve con la cámara. false: se queda en su sitio de la sala.—true
  • Sale donde está el objeto en el editor. Lo más cómodo es ponerlo en una zona pequeña (herramienta Zone), que el juego no dibuja.
  • Con Fixed on screen, su sitio en la sala, visto con la cámara en 0, 0, es su sitio en la pantalla.
  • Se escribe encima de todo, después de las capas.
  • Una variable de sí o no sale como true o false.
  • Solo cuenta en los objetos colocados en la sala: en una plantilla no hace nada, y el panel de problemas no lo avisa.
  • Sirve para ver lo que cambian las acciones Change a variable y Lose a life.
  • Cuerpo: no necesita sprite. Va en cualquier objeto.

Animation​

Cómo se reproducen los fotogramas del sprite de este objeto: a qué velocidad, en bucle, de ida y vuelta o al revés.

AjusteQué esUnidadesPor defecto
Frames per secondVelocidad. Con 0, se queda quieto en su fotograma.fps8
LoopVuelve a empezar al acabar.—true
Ping-pongVa hasta el último fotograma y vuelve, sin parar. Con él, Loop no cuenta.—false
BackwardsAl revés: desde el fotograma del objeto (Angle / Frame) hacia el 0.—false
  • Sin Animation, un objeto que empieza en el fotograma 0 se anima como diga su sprite en el editor de sprites, y uno que empieza en otro fotograma se queda quieto en él. Con Animation, mandan estos cuatro ajustes, solo en este objeto.
  • Sin Loop, al acabar la animación el sprite se apaga y el objeto desaparece del juego: sirve para una explosión.
  • Al revés y sin Loop, acaba en el fotograma 0. Si el objeto empieza en el 0, desaparece enseguida; el panel de problemas lo avisa.
  • Se aplica al cargar: no se puede apagar ni cambiar en un estado. Para reproducir un tramo de la hoja de fotogramas, usa la acción Play an animation.
  • Cuerpo: cualquiera.

Spawner​

Crea copias de una plantilla cada cierto tiempo: enemigos que no paran de llegar, gotas, meteoritos.

AjusteQué esUnidadesPor defecto
TemplateLa plantilla de la que hace copias.—(vacío)
Every (s)Cada cuánto crea copias.s2
How many each timeCuántas copias crea cada vez.copias1
Max at onceCuántas copias suyas puede haber vivas a la vez.copias8
Inside zoneUna zona de la sala: cada copia sale en un punto al azar dentro de ella. Vacío: en el sitio del spawner.—(vacío)
EnabledSi empieza encendido.—true
  • La plantilla sale de un objeto de la sala (Objetos). Cada copia nace con sus comportamientos, su etiqueta, su código y sus estados.
  • La primera tanda sale al pasar Every (s) segundos, no al cargar la sala.
  • Every (s) tiene que ser mayor que 0. La tarjeta no lo comprueba: con 0, crea copias en cada fotograma, hasta Max at once.
  • Max at once solo cuenta sus copias vivas: cuando se destruye una, deja sitio para otra. Es el tope que evita que una placa se quede sin memoria.
  • Puede ir en un objeto sin sprite, como una zona.
  • Apagado, no crea copias.
  • Desde tu código, SceneSpawners(room, false) apaga todos los spawners de la sala, y SceneSpawners(room, true) los enciende.
  • Cuerpo: cualquiera. Las copias llevan el de la plantilla.

Con reglas y estados​

Una regla puede quitar vida a un objeto con Health (acción Take health away) y encender o apagar cualquiera de los diez comportamientos que tienen Enabled (acción Turn a behaviour on or off). Los estados de un objeto (botón Edit states... del apartado STATES) dicen qué comportamientos van encendidos en cada estado y pueden cambiar algunos de sus ajustes. Todo eso se cuenta en Reglas y estados.

El código que generan​

Al compilar, cada comportamiento se convierte en código JARU. Los ficheros y cómo se usan están en El código que genera.

  • Los diez que tienen Enabled son un struct con su función de paso, en Code/SceneRuntime.gen.aru. Ese fichero solo lleva los que usa el proyecto.
  • La sala crea uno por objeto al cargar. En cada fotograma, <Sala>Update(room) hace que todos den su paso, antes que las reglas.
  • Animation no tiene paso: al cargar, le pone al sprite frameRate, loop, yoyo y dir (Sprite).
  • Show a variable tampoco: <Sala>Draw(room) lo escribe con Draw.text.
  • Lo que no se puede generar (un comportamiento que pide sprite en un objeto sin él, o Platform control en una sala sin física) se queda en el .gen.aru como un comentario que lo explica.
  • Con las salas como datos, los comportamientos solo funcionan desde el .gen.aru de su sala. El Build lo avisa.
ComportamientostructLista de la sala
Linear motionSceneBehLinearroom.behLinear
PatrolSceneBehPatrolroom.behPatrol
Follow routeSceneBehPathroom.behPath
Follow / fleeSceneBehFollowroom.behFollow
Sine waveSceneBehSineroom.behSine
Platform controlSceneBehPlatformerroom.behPlatformer
Top-down controlSceneBehTopdownroom.behTopdown
HealthSceneBehHealthroom.behHealth
Destroy when it leavesSceneBehOffscreenroom.behOffscreen
SpawnerSceneBehSpawnerroom.behSpawner

Problemas conocidos​

  • Del quinto comportamiento en adelante no se ve. Caben cuatro tarjetas: con cinco, el inspector dice «Showing the first 4 behaviours of 5». El quinto funciona en el juego, pero no se puede editar ni quitar. Ponle cuatro como mucho. Si ya tiene cinco, deshaz con Undo o quita uno de los cuatro primeros: el quinto pasa a su tarjeta.
  • Un Spawner sin zona suelta las copias donde estaba al cargar la sala, aunque se haya movido. Puesto en una zona, salen en su esquina de arriba a la izquierda, no en el centro; en una plantilla, en la esquina de la sala (0, 0). Dale una zona en Inside zone: a un spawner puesto en una zona con nombre le vale ella misma. Para crear copias donde está un objeto que se mueve, usa la acción Create from a template con at the subject.
  • Con física, Follow / flee no para el objeto cuando su objetivo desaparece: sigue deslizándose en la última dirección. Si el objetivo puede desaparecer, apaga Follow / flee cuando pase, con la acción Turn a behaviour on or off (por ejemplo, en la regla que lo destruye): al apagarlo, el objeto se para.
  • El panel de problemas propone Dynamic «to also fall», y no cae. Con física, a Linear motion, Patrol, Follow route, Follow / flee y Top-down control en un objeto Visual o Static, el aviso propone «Kinematic (or Dynamic, to also fall)». Con Dynamic baja flotando, muy despacio, porque el comportamiento le pone la velocidad vertical en cada fotograma. Usa Kinematic, o Dynamic con Gravity scale a 0.
  • Show a variable y Spawner siguen funcionando aunque ocultes su objeto con el ojo del árbol de la sala: el texto se sigue escribiendo y el spawner sigue creando copias. Para quitarlos del juego, quita el comportamiento.
  • La descripción de Health habla de la acción «damage». En la lista de acciones se llama Take health away.