Entrada y salida

From Valve Developer Community
Jump to: navigation, search
English Deutsch Русский 简体中文

Cuando un niño se asusta de un sonido, en la informática se suele decir, que el niño ha cometido una entrada (reacción) al escuchar el sonido (acción del sonido, que es, asustar)

Entrada y salida, o mejor entendido "Hecho-consecuencia", reacción-acción (y no al revés) (conjuntamente "E/S" o en inglés "I/O") son términos para describir los medios por los cuales las entidades se comunican entre ellas en mapas. Las entidades tienen dos métodos para comunicarse: enviar una "salida" (señal que sale) a otra entidad, o a una "entrada" receptiva de otra entidad. Por ejemplo, una entidad puede mandar una salida cuando es eliminada a otra entrada de entidad que causa que cambie de color.

Imagina una entidad como un logic_timer. Podría estar configurada para "activar" su entrada OnTimer cuando llegue a un límite de tiempo, el cual activa (o llama) la salida ShowSprite de un "sprite" (env_sprite).


Entradas (acción/hecho)

Las entradas/acciones son comandos u acciones que causan que una entidad cambie lo que esté haciendo. Son activadas (o llamadas) por las salidas - no pueden ser manipuladas directamente.

En el Hammer Editor, puedes ver una lista de acciones que entidad (A) recibe, en la pestaña "Inputs", en las propiedades de un objeto. Haciendo clic en "Mark" te llevará a la entidad (B), que está activando la acción.

Salidas (reacción/consecuencia)

"Object Properties" Ventana de las propiedades de una entidad, en Hammer

Las salidas/reacciones, son eventos, o sucesos, que se activan cuando hay un cambio en el estado de la entidad. Por así decirlo, un cronómetro (timer) podrá cometer una reacción al llegar al tiempo límite. Un botón (button) activará un evento al ser pulsado/apretado, o una pistola, desencadenará una reacción (disparar una bala) al apretar el gatillo.

Esto se entiende así:

1. Apretar el gatillo -> Acción
2. Una bala sale disparada -> Reacción
1. Cometer la acción, desencadenar algo = Acción
2. Consecuencia de la acción = Reacción
1. Un ejército verde invade el país azul = Acción
2. El ejército azul dispara contra el verde = Reacción

________________

Las reacciones son creadas en la pestaña "Outputs", en las propiedades de una entidad. Este menú te da una lista de reacciones, que están siendo emitidas, por la entidad que los emite, campos de texto para configurarlas y étcera. En el Hammer Editors, se entiende así:

Output name (Nombre de la reacción)
¿Qué causa a esta reacción, activarse? Por ejemplo, un activador (trigger_multiple) puede activar un "al activar" (OnTrigger) una reacción cuando el jugador entra o interacciona en el activador.
Target entity (Objetivo)
El objetivo (targetname) o nombre de la clase (classname) de una entidad que recibirá la entrada/reacción. Se aceptan asteriscos (*) para buscar un objetivo con nombre incompleto/general.
  • En el Hammer Editor, un objetivo en negrita, son múltiples entidades con el mismo nombre.
  • Si se pone en rojo, significa que no encuentra una entidad que se llame como el objetivo.
    Bug: Los "classname" y valores "wildcard" y nombres (Targetname) especiales special targetnames aparecerán en rojo. ¡No te alarmes!: ¡El motor las reconocerá!
Input name (nombre de la acción)
The input on the target entity that will be triggered. This too will be context sensitive. For example, if sending an output to a Door entity, some of the available inputs will be "Close" or "Open".
Parameters (Parámetros)
Puedes pasar información a un objetivo (targetname) con parámetros. Un parámetro puede ser cualquier cosa: el volumen de un sonido, el targetname de otra entidad, o quizá un color. Todo depende de lo que la acción acepte. Si no es posible poner parámetros, la casilla se volverá gris.
Algunas reacciones, como contadores (math_counter) con OutValue, generan parámetros por su propia cuenta. Para usar un parámetro preparado, deja el campo de "Parameters" vacío.
Time delay (Tiempo de retraso)
La cantidad de tiempo (en segundos) que tardará en hacer efecto la reacción.
Fire once only (Activar sólo una vez)
Significa que esta reacción, no podrá volver a ocurrir, más que una vez.

Cómo entenderlo mejor: Ejemplos

Para entenderlo mejor, interpreta la tabla.

Lista de sucesos de una puerta
Entrada/Reacción Objetivo Salida/Acción Parámetro Tiempo de reacción Ocurrir sólo una vez
Entity-output-icon.png Al abrir la puerta Luz de la habitación Encender la luz <ninguno> 1.00 segundo
Entity-output-icon.png Al abrir la puerta Personas escondidas Salir del escondite <ninguno> 1.50 segundos
Entity-output-icon.png Al salir del escondite Tú; Personas escondidas Reconocerlas como <Invitados de cumpleaños> 1.55
Entity-output-icon.png Al ver al objetivo Invitados de cumpleaños Felicitar <Persona que ha abierto la puerta> 0.00

Esta tabla describe una escena: Tú, (objetivo) vuelves a casa, y al abrir la puerta (reacción), la luz se enciende sola, y salen de su escondite, personas escondidas (acción), que ellas, al salir del escondite (reacción), las reconoces como invitados de un cumpleaños (acción). Los invitados de cumpleaños, al verte (reacción), te felicitan (acción).

Preparando un activador

Esto será un ejemplo de cómo puedes crear un activador utilizando entradas y salidas, así que harás que un sonido se oiga, cuando el jugador entre en una zona.

Abre un mapa y añade un ambient_generic (en el campo "Name", pon el nombre del sonido, por ejemplo, "grito"). Vete a sus propiedades y elige un archivo de sonido para reproducir. En la pestaña Flags, activa la casilla "Start Silent". Selecciona la textura "tools/toolstrigger" y crea un cubo que el jugador traspasará. Haz clic derecho sobre el sólido y haz clic en "Tie to Entity", y escribe trigger_once. Ve a la pestaña Outputs y haz clic en Add....

En donde pone "My output named" elige la opción "OnStartTouch". Esto causará que la reacción sea "Al empezar a tocar el activador".

En donde pone "Targets entities named" escribe el nombre del sonido, o "grito". Esto señalará qué objetivo hará la acción.

En la caja "Via this input" selecciona "PlaySound". Esta caja, contiene todas las acciones que puede hacer el sonido. "PlaySound" significa "ReproducirSonido".

Dale al botón de Aplicar (Apply) para guardar los cambios, y cierra la ventana. Ya tenemos el activador colocado, para que, cuando el jugador lo toque (OnStartTouch), se empiece a reproducir (PlaySound), el sonido ("grito").

Si quieres compilar y comprobar tu activador, asegúrate de que tienes las cosas básicas, como el lugar del jugador, la luz, étcera. No te olvides de asignar un sonido a la entidad "grito".

Depurando

Source te provisiona de varias herramientas para saber como funcionan las cadenas I/O.

La mejor de ellas son las propiedades de la entidad. Entradas y salidas se remarcan en rojo, en la lista de entradas/salidas; los iconos I/O en la parte inferior del cuadro de diálogo, también cambia acordemente.

Ya dentro del motor gráfico, hay una serie comandos y variables en la consola que te ayudarán a localizar errores mientras ejecutas tu mapa:

developer <0-2>
Modo desarrollador informa todas las entradas/salidas a la consola, a menos que juegues en un servidor dedicado que active trucos (los cuales son necesarios para verlos). Si estás en el modo developer 2, recibirás también las últimas ocho líneas mostradas en la parte superior izquierda.
ent_messages_draw <bool>
Muestra la misma información que el modo desarrollador, excepto que en vez de aparecer en la consola, la información se muestra en directo en el mundo 3D.
ent_fire <targetname o classname> <acción> <parámetro>
Este comando es extremadamente útil. Te permite manualmente activar acciones de cualquier entidad en cualquier momento. Si quisieras desbloquear una puerta, podrías escribir ent_fire "nombre de la puerta" unlock, y para abrirla escribir ent_fire my_door open.
Como en el "output target" (objetivo) en Hammer, ent_fire soporta "classnames" y "wildcards".
ent_pause
Este comando pausa todas las E/S de todas las entidades. Para resumir las acciones, vuelve a escribir el comando. Está diseñado para usarse con el ent_step.
ent_step <número de pasos>
Cuando lo utilizas con ent_pause, este comando hace que las entidades, actuen en una serie de números específicos de E/S antes de resumirse.

Échale a un ojo