Eventos en Scratch 3: disparadores, sincronización y comienzo de comportamientos

Capítulo 2

Tiempo estimado de lectura: 8 minutos

+ Ejercicio

¿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):

  1. Crea (si hace falta) variables como puntos, vidas o modo.
  2. 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.

Continúa en nuestra aplicación.
  • Escuche el audio con la pantalla apagada.
  • Obtenga un certificado al finalizar.
  • ¡Más de 5000 cursos para que explores!
O continúa leyendo más abajo...
Download App

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):

  1. Elige un sprite (por ejemplo, “Jugador”).
  2. 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:

  1. Crea una variable global llamada modoLinterna.
  2. 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:

  1. Crea un sprite “BotónJugar”.
  2. En “BotónJugar”, al hacer clic envía un mensaje:
cuando se haga clic en este objeto  enviar [comenzarJuego v]
  1. En el sprite “Jugador”, escucha el mensaje:
al recibir [comenzarJuego v]  ir a x:(-150) y:(-80)  mostrar
  1. 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      rebotar

Idea 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 modo o puntos) 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 [...]  ocultar

3) 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

  1. Variables globales: estado, modoSigilo.
  2. Escenario o sprite Control:
cuando se presione bandera verde  set [estado v] a [menu]  set [modoSigilo v] a [no]  enviar [preparar v]
  1. Botón “Jugar”:
al recibir [preparar v]  mostrar
cuando se haga clic en este objeto  ocultar  enviar [comenzar v]
  1. 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]
  1. 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)
  1. 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 verdeLista de sprites y guionesReset, posiciones, estado
Tecla (→)Guion del Jugadorx aumenta
Clic en BotónJugarEnvía mensaje comenzarestado 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?

Ahora responde el ejercicio sobre el contenido:

En un proyecto con bandera verde para preparar, un botón que envía un mensaje para comenzar y teclas para mover al jugador, ¿qué práctica ayuda mejor a evitar que el jugador se mueva mientras aún está en el menú?

¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.

¡Tú error! Inténtalo de nuevo.

Una variable estado separa “preparación/menú” de “juego en marcha”. Si los guiones de teclado solo actúan cuando estado = jugando, se evitan conflictos y movimientos accidentales antes de comenzar.

Siguiente capítulo

Secuencias en Scratch 3: orden, dependencia y trazado paso a paso

Arrow Right Icon
Portada de libro electrónico gratuitaScratch 3 para entender la lógica: bloques esenciales y cómo se conectan
18%

Scratch 3 para entender la lógica: bloques esenciales y cómo se conectan

Nuevo curso

11 páginas

Descarga la aplicación para obtener una certificación gratuita y escuchar cursos en segundo plano, incluso con la pantalla apagada.