¿Qué es un evento en Scratch?
En Scratch, un evento es un disparador: algo que ocurre (una acción del usuario o una señal del proyecto) y que inicia uno o varios guiones. La idea clave es pensar: “Cuando pase X, entonces empieza Y”. Un mismo proyecto puede tener muchos eventos y, por lo tanto, muchos comienzos posibles para distintos comportamientos.
Eventos más usados como disparadores
- Bandera verde: inicio “global” del proyecto.
- Teclas: reacción inmediata a entradas del teclado.
- Clic en un sprite: interacción directa con un objeto.
- Mensajes (
enviar/al recibir): sincronización entre sprites o entre guiones.
Bandera verde: el inicio que prepara el proyecto
La bandera verde suele usarse para dejar el proyecto en un estado inicial consistente. Un patrón muy común es: “al iniciar, preparar”. Esto evita que el proyecto arranque “a medias” (por ejemplo, con variables viejas o sprites en posiciones raras).
Patrón: “al iniciar, preparar” (reset)
Objetivo: que cada vez que se presione bandera verde, todo quede listo para jugar o probar.
Paso a paso (ejemplo típico en un sprite):
- Crea (si hace falta) variables como
puntos,vidasomodo. - En el sprite, arma este guion base:
cuando se presione bandera verde set [puntos v] a (0) set [vidas v] a (3) ir a x:(-150) y:(-80) apuntar en dirección (90) mostrar cambiar disfraz a [normal v]Consejo práctico: si varios sprites comparten variables globales (por ejemplo puntos), decide un solo lugar donde se reinician (por ejemplo, el Escenario o un sprite “Control”). Así evitas que dos guiones pongan valores distintos al mismo tiempo.
- Escuche el audio con la pantalla apagada.
- Obtenga un certificado al finalizar.
- ¡Más de 5000 cursos para que explores!
Descargar la aplicación
Teclas: reacción rápida del usuario
Los eventos de teclado son ideales para controles (mover, saltar, disparar). El patrón recomendado es: “al presionar tecla, reaccionar”. Aquí el evento es la causa; el guion es la respuesta.
Patrón: “al presionar tecla, reaccionar”
Paso a paso (movimiento simple):
- Elige un sprite (por ejemplo, “Jugador”).
- Crea dos guiones separados para dos teclas:
cuando se presione tecla [flecha derecha v] cambiar x por (10) cambiar disfraz a [caminar v]cuando se presione tecla [flecha izquierda v] cambiar x por (-10) cambiar disfraz a [caminar v]Variación útil: si quieres que una tecla active un comportamiento que dura (por ejemplo, “correr” mientras se mantiene presionada), Scratch no detecta “tecla soltada” como evento directo. Una solución común es usar un bucle con si <tecla ... presionada?> dentro de un guion que se inicia con bandera verde, pero aquí el disparador inicial sigue siendo un evento (bandera verde) y la reacción depende del estado del teclado.
Clic en un sprite: interacción directa y “modos”
El evento cuando se haga clic en este objeto es perfecto para botones, interruptores, selección de herramientas o activar un “modo”. El patrón recomendado es: “al hacer clic, activar modo”.
Patrón: “al hacer clic, activar modo”
Ejemplo: un sprite “Linterna” que activa/desactiva el modo linterna.
Paso a paso:
- Crea una variable global llamada
modoLinterna. - En el sprite “Linterna”, crea este guion:
cuando se haga clic en este objeto si <(modoLinterna) = [apagada]> entonces set [modoLinterna v] a [encendida] cambiar disfraz a [on v] si no set [modoLinterna v] a [apagada] cambiar disfraz a [off v]Uso del modo en otro sprite (ejemplo “Jugador”):
cuando se presione bandera verde por siempre si <(modoLinterna) = [encendida]> entonces poner efecto [brillo v] a (30) si no poner efecto [brillo v] a (0)Así, el clic no solo hace una acción puntual: cambia un estado (modo) que otros guiones consultan.
Mensajes: sincronización entre guiones y sprites
Los mensajes permiten que un evento en un lugar dispare comportamientos en otros. Funcionan como una señal: un guion envía un mensaje y otros guiones escuchan con al recibir. Esto ayuda a coordinar escenas, cambios de nivel, inicio de música, aparición de enemigos, etc.
Ejemplo: “Comenzar juego” desde un botón
Objetivo: que un botón inicie el juego y varios sprites arranquen sincronizados.
Paso a paso:
- Crea un sprite “BotónJugar”.
- En “BotónJugar”, al hacer clic envía un mensaje:
cuando se haga clic en este objeto enviar [comenzarJuego v]- En el sprite “Jugador”, escucha el mensaje:
al recibir [comenzarJuego v] ir a x:(-150) y:(-80) mostrar- En el sprite “Enemigo”, también escucha el mismo mensaje:
al recibir [comenzarJuego v] mostrar por siempre mover (5) pasos si <tocando [borde v]?> entonces rebotarIdea clave: un solo evento (clic en botón) puede iniciar muchos guiones mediante un mensaje, manteniendo el proyecto ordenado.
Varios inicios en un mismo proyecto (y por qué importa)
Es normal que un proyecto tenga múltiples disparadores: bandera verde para preparar, teclas para controlar, clics para activar modos, mensajes para coordinar. El reto aparece cuando dos o más eventos disparan guiones que afectan lo mismo (misma variable, misma posición, mismo disfraz) y se pisan entre sí.
Conflictos típicos cuando se disparan a la vez
- Dos guiones mueven el mismo sprite: uno lo lleva a una posición inicial y otro lo empuja por teclado al mismo tiempo.
- Dos guiones cambian la misma variable (por ejemplo
modoopuntos) con reglas distintas. - Dos guiones cambian disfraces/efectos y el resultado “parpadea” o parece aleatorio.
Estrategias para evitar conflictos
1) Separar “preparación” de “juego en marcha” usando una variable de estado
Crea una variable global estado con valores como menu, jugando, pausa.
cuando se presione bandera verde set [estado v] a [menu] enviar [mostrarMenu v]al recibir [comenzarJuego v] set [estado v] a [jugando]Luego, en los controles por teclado:
cuando se presione tecla [flecha derecha v] si <(estado) = [jugando]> entonces cambiar x por (10)Así evitas que el jugador se mueva cuando aún estás en menú o preparando.
2) Un “sprite Control” para centralizar reinicios
Si el reinicio de variables está repartido en muchos sprites, es más fácil que haya inconsistencias. Un sprite “Control” (o el Escenario) puede encargarse de:
- Reset de variables globales
- Enviar mensajes de “preparar” a cada sprite
- Definir el
estado
cuando se presione bandera verde set [puntos v] a (0) set [vidas v] a (3) enviar [prepararSprites v]al recibir [prepararSprites v] // (en cada sprite) ir a x:(...) y:(...) cambiar disfraz a [...] ocultar3) Evitar “doble inicio” del mismo comportamiento
Si un comportamiento puede arrancar por dos eventos (por ejemplo, tecla y clic), usa una variable “candado” para que solo se active una vez.
cuando se presione tecla [espacio v] si <(disparoListo) = [si]> entonces set [disparoListo v] a [no] enviar [disparar v]al recibir [recargar v] set [disparoListo v] a [si]Guía práctica: construir un proyecto con varios disparadores sin caos
Mini-proyecto: “Personaje con modo sigilo y comienzo por botón”.
Objetivo
- Bandera verde: preparar todo (reset).
- Clic en “Jugar”: comenzar el juego (mensaje).
- Teclas: mover al personaje solo si se está jugando.
- Clic en personaje: activar/desactivar modo sigilo.
Paso a paso
- Variables globales:
estado,modoSigilo. - Escenario o sprite Control:
cuando se presione bandera verde set [estado v] a [menu] set [modoSigilo v] a [no] enviar [preparar v]- Botón “Jugar”:
al recibir [preparar v] mostrarcuando se haga clic en este objeto ocultar enviar [comenzar v]- Jugador (preparar y comenzar):
al recibir [preparar v] ir a x:(-150) y:(-80) mostrar cambiar disfraz a [normal v]al recibir [comenzar v] set [estado v] a [jugando]- Jugador (teclas):
cuando se presione tecla [flecha derecha v] si <(estado) = [jugando]> entonces cambiar x por (10)cuando se presione tecla [flecha izquierda v] si <(estado) = [jugando]> entonces cambiar x por (-10)- Jugador (clic activa modo):
cuando se haga clic en este objeto si <(estado) = [jugando]> entonces si <(modoSigilo) = [no]> entonces set [modoSigilo v] a [si] poner efecto [fantasma v] a (60) si no set [modoSigilo v] a [no] poner efecto [fantasma v] a (0)Con esto, cada evento tiene un rol claro y el estado evita que se mezclen acciones de menú con acciones de juego.
Ejercicios de trazado (qué guiones se activan con cada evento)
El trazado consiste en leer un proyecto y responder: ¿qué guiones arrancan cuando ocurre este evento? Hazlo como si fueras un “detective” de disparadores.
Ejercicio 1: Mapa de disparadores
En tu proyecto (o en uno de ejemplo), completa una tabla como esta:
| Evento | ¿Qué guiones se activan? | ¿Qué cambia? (variables/posición/disfraz) |
|---|---|---|
| Bandera verde | Lista de sprites y guiones | Reset, posiciones, estado |
| Tecla (→) | Guion del Jugador | x aumenta |
| Clic en BotónJugar | Envía mensaje comenzar | estado pasa a jugando |
| Mensaje “comenzar” | Jugador, Enemigo, Música… | arranque sincronizado |
Ejercicio 2: Predicción de conflictos
Busca dos guiones distintos que puedan cambiar la misma cosa (por ejemplo, x del jugador o la variable estado). Responde:
- ¿Qué eventos los disparan?
- ¿Pueden ocurrir “casi al mismo tiempo”?
- ¿Qué verías en pantalla si se pisan?
- ¿Qué solución aplicarías:
estado, mensaje, o centralizar en Control?
Ejercicio 3: “¿Qué se ejecuta si…?”
Escribe la respuesta sin ejecutar el proyecto, solo leyendo los bloques:
- Si presiono bandera verde y luego hago clic en el jugador, ¿qué guiones arrancan y en qué orden lógico?
- Si presiono flecha derecha mientras el estado está en
menu, ¿se mueve? ¿Por qué? - Si hago clic dos veces rápido en un botón que envía
comenzar, ¿qué guiones podrían duplicarse? ¿Cómo lo impedirías con un candado?