Spa:Bloque apilable

Un bloque apilable es un bloque diseñado para poder conectarse tanto por arriba como por abajo a otros bloques. La mayoría de bloques de Scratch son apilables, y están presentes en todas las categorías salvo en los Bloques operadores y los Bloques de PicoBoard.

Proceso de ejecución
Cuando se conectan varios bloques apilables formando un script, sus instrucciones se ejecutan en orden de arriba a abajo. Toda la pila se ejecuta en un fotograma. Por ejemplo, en el siguiente script:

reiniciar cronómetro mover (10) pasos mover (10) pasos mover (10) pasos mover (10) pasos mover (10) pasos fijar [tiempo transcurrido v] a (cronómetro)

la variable tiempo transcurrido mostrará que la pila se ha ejecutado en 0 segundos. Así pues, aunque hay cinco bloques de movimiento, no se observa al objeto hacer cinco movimientos de 10 pasos, sino un único movimiento de 50 pasos. Desde luego, un script especialmente largo puede necesitar más tiempo para ejecutarse, por lo que el tiempo transcurrido podría ser mayor.

Tomemos ahora el siguiente código. Aunque parece equivalente, solo que utilizando un bucle, esta vez no se ejecuta en un solo fotograma:

reiniciar cronómetro repetir (5) mover (10) pasos end fijar [tiempo transcurrido v] a (cronómetro)

En este caso sí se sucederán cinco movimientos independientes de 10 pasos cada uno, y el script necesitará cinco fotogramas para ejecutarse. La variable tiempo transcurrido debería mostrar 0.166 segundos (1/6, o 5 fotogramas a 30 por segundo). Esto sucede por cómo funciona el bucle de repetición: cada iteración se ejecuta en un fotograma distinto. De hecho, la única manera de evitar este comportamiento es colocando el bucle dentro de un bloque personalizado y marcando la casilla "Correr instantáneamente".

Bloques apilables con retardo
Algunos bloques apilables, desde luego, sí fuerzan una pausa antes de que el siguiente bloque se ejecute. Bien fijando un tiempo en segundos o en pulsos:


 * deslizar en segs a x:  y:
 * decir por  segundos
 * pensar por  segundos
 * tocar tambor durante
 * silencio por pulsos
 * toca nota durante
 * esperar segundos

o bien esperando hasta que se dé algún evento o condición:


 * cambiar fondo a y esperar
 * tocar sonido y esperar
 * enviar y esperar
 * esperar hasta que
 * preguntar y esperar

Bloques
Hay 77 bloques apilables en Scratch:


 * mover pasos
 * girar a la derecha grados
 * girar a la izquierda grados
 * apuntar en dirección
 * apuntar hacia
 * ir a x: y:
 * ir a
 * deslizar en segs a x:  y:
 * cambiar x por
 * fijar x a
 * cambiar y por
 * fijar y a
 * rebotar si toca un borde
 * fijar estilo de rotación


 * decir por  segundos
 * decir
 * pensar por  segundos
 * pensar
 * mostrar
 * esconder
 * cambiar disfraz a
 * siguiente disfraz
 * cambiar fondo a
 * cambiar fondo a y esperar
 * siguiente fondo
 * cambiar efecto por
 * establecer efecto a
 * quitar efectos gráficos
 * cambiar tamaño por
 * fijar tamaño a %
 * enviar al frente
 * ir capas hacia atrás


 * tocar sonido
 * tocar sonido y esperar
 * detener todos los sonidos
 * tocar tambor durante  pulsos
 * silencio por pulsos
 * tocar nota durante  pulsos
 * fijar instrumento a
 * cambiar volumen por
 * fijar volumen a %
 * cambiar tempo por
 * fijar tempo a ppm


 * borrar
 * sellar
 * bajar lápiz
 * subir lápiz
 * fijar color de lápiz a (color)
 * cambiar color de lápiz por
 * fijar color de lápiz a (#)
 * cambiar intensidad de lápiz por
 * fijar intensidad de lápiz a
 * cambiar tamaño de lápiz por
 * fijar tamaño de lápiz a


 * enviar
 * enviar y esperar


 * esperar segundos
 * esperar hasta que
 * crear clon de


 * preguntar y esperar
 * reiniciar cronómetro
 * video
 * fijar transparencia de video a %



Forma
Los bloques apilables están diseñados de manera similar a una pieza de puzle: la parte superior tiene una hendidura, y la inferior un saliente. Debido a esta forma, se pueden conectar unos a otros, y los scripts se pueden extender indefinidamente.

Esta forma les permite conectarse en cualquiera de estas areas:

al presionar bandera verde decir [¡Hola Mundo!] por (2) segundos
 * Debajo (después) de un bloque de inicio:

ir a x: (0) y: (0) bajar lápiz mostrar
 * Encima o debajo de otros bloques apilables:

decir [¡Adiós!] por (2) segundos detener [este programa v]
 * Encima (antes) de un bloque de cierre:

por siempre si <(puntos) = (0)> entonces enviar [game over v]
 * Dentro de un bloque C:

Uso
Dado que estos bloques se pueden apilar entre ellos, se usan prácticamente en todas partes en un script. Cualquier script debe contener al menos un bloque apilable para ser funcional. Un ejemplo:

al presionar bandera verde subir lápiz ir a x: (0) y: (0) apuntar en dirección (0 v) bajar lápiz repetir (4) mover (100) pasos girar a la derecha (90) grados end decir [¡Cuadrado terminado!] por (2) segundos detener [este programa v]

Obsérvese que los bloques apilables constituyen todos los comandos del script.