Coordinación entre objetos mediante mensajes

Los objetos y fondos de un proyecto pueden comunicarse entre sí y coordinarse mediante el envío y recepción de mensajes:  un objeto/fondo envía un mensaje que puede recibir cualquier otro objeto y fondo.

Uno o más objetos/fondos pueden reaccionar a la recepción de un mensaje, ejecutando un programa.

Por ejemplo, si deseamos que dos objetos mantengan un diálogo, podríamos utilizar las instrucciones "decir  ____ por  ____ segundos" y "esperar  ___ segundos" para coordinar el diálogo entre ambos. Pulsa sobre este proyecto para ver cómo está programado.

Programa del Objeto Chico Programa del Objeto Chica

Elaboración propia utilizando Scratch

La coordinación entre ambos objetos se realiza controlando el tiempo que tiene que esperar cada objeto para mostrar el siguiente diálogo.

Observa que mientras el objeto Chico está mostrando un diálogo, el objeto Chica debe estar esperando.

Para que el control del diálogo sea más fácil y no haya que estar calculando el número de segundos que cada uno tiene que esperar, un objeto puede avisar a otro de que ha terminado de mostrar su diálogo a través del envío del evento mensaje. El otro objeto estará esperando recibir este evento y cuando lo reciba sabrá que el otro objeto ha terminado de mostrar su cuadro de diálogo y ahora le tocará a este objeto mostrar su diálogo.

Pulsa sobre este proyecto que también desarrolla el mismo diálogo entre los dos personajes pero utilizando el evento de envío y recepción de mensajes.

En este nuevo proyecto cada vez que un objeto termina de mostrar su diálogo envía un mensaje al otro objeto.

Programa del Objeto Chico Programa del Objeto Chica

Elaboración propia utilizando Scratch 

Envío y recepción de mensajes

El envío y recepción de mensajes son dos instrucciones de control del tipo Eventos.

La instrucción "enviar message1"  provoca que se envíe el mensaje denominado “message1” a todos los objetos. El nombre del mensaje hay que definirlo en la instrucción, al crear un nuevo mensaje.

Elaboración propia utilizando Scratch

Cuando tenemos un programa que envía varios mensajes, es recomendable definir nombres que ayuden a saber a qué mensaje se refiere en cada momento.

La instrucción "al recibir message1"  sólo puede aparecer como la primera instrucción de un programa. Fíjate en la forma de esta instrucción y en cómo no se pueden enganchar bloques encima de éste:

Imagen elaborada a través de Scratch

Cuando se recibe el mensaje especificado, en este ejemplo "message1", se ejecutan las instrucciones que aparecen a continuación del mismo.

Pinchando con el botón derecho del ratón sobre el nombre del mensaje se puede saber qué objetos envían el mensaje y cuáles lo reciben, los objetos aparecen redondeados en amarillo en la zona de objetos.

En algunos casos puede ser útil enviar un mensaje y esperar a que todos los objetos lo hayan recibido. El siguiente bloque "enviar _____ y esperar" permite enviar un mensaje a todos los objetos y fondos del proyecto y, además, espera hasta que todos los elementos han recibido dicho mensaje:

Elaboración propia utilizando Scratch

El uso de mensajes nos permite coordinar las ejecuciones de los programas de diferentes objetos, asegurándonos de que un programa comience a ejecutarse sólo después de que otro programa haya ejecutado determinadas instrucciones.