- lampeggiatore: è una lampadina che si accende e si spegne automaticamente a cadenza prefissata, alle volte sono due lampadine che si alternano nell'accensione come per le auto della polizia.
Si usa una commutazione temporizzata (esempio). In questo caso è stato usato un controllo giallo "per sempre" nello script di ciascuno dei due sprite; grazie alla identità degli script dei due sprite ed all'avvio contemporaneo dovuto all'uso della bandierina verde come start per entrambi gli script, l'alternanza del lampeggio non dovrebbe modificarsi con il tempo. E' un lampeggio solo apparentemente sincrono, in realtà è asicrono poichè è sempre possibile uno sfasamento dei lampeggi.
Per capire cosa si intende con quest'ultima osservazione occorre pensare che, di fatto, i due script procedono come se ci fosse un orologio a scandire il tempo dell'esecuzone di ciascuna istruzione; una leggera perdita di tempo in uno dei due significa, a lungo andare, perdere la sincronizzazione.
Quando deve esserci una relazione temporale fra eventi di due sprite diversi. é rischioso affidarsi a due processi indipendenti perchè sono sempre possibili leggeri sfasamenti di tempo fra i diversi script; per esempio nel caso in cui il software che fa "girare" Scratch non sia assolutamente rigoroso nei tempi (non ci è dato saperlo perchè non conosciamo il suo funzionamento e non sappiamo nemmeno se possa essere disturbato da altri processi a cui il PC deve rispondere).
Per capire, può essere utile provare ad introdurre in uno solo dei due script una sola istruzione come "mostra" presa tra le istruzioni viola di "aspetto". Questa leggera modifica, anche se non produce effetti, fa perdere in breve tempo la sincronizzazione ed ad un certo punto le due lampadine si accendono e si spengono contemporaneamente mentre all'inizio erano a luci alternate.
Per il lampeggiante della polizia non è grave ma per un semaforo si.
Allora è più prudente usare il ciclo "per sempre" in un solo sprite o nello stage (come in questo caso) ed inviare messaggi con l'istruzione di controllo "invia a tutti (messaggio)" per fare eseguire le azioni ad ogni sprite che ha nello script l'istruzione di controllo "quando ricevi(messaggio)"(vedi esempio).
In questo modo la scansione temporale dipende da un un solo "orologio" che provvede ad inviare i messaggi utili a fare eseguire le operazioni previste; l'orologio può anche non essere preciso ma non sbaglia la sequenza (in un semaforo questa circosatnza è ampiamente sufficiente per garantire la corretta gestione dell'incrocio senza generale pericoli).
In aggiunta, le eventuali modifiche dei tempi si possono effettuare in un solo luogo senza doversi ricordare di tutte le ricorrenze in tutti gli sprite per cui è meglio usare la "variabile" ritardo, cosi che deve essere modificata una sola volta (vedi esempio).
Sviluppi
- inserire nel lampeggio il suono bitonale della polizia (informazioni utili sulle note musicali usate le trovate qui e qui). I toni della sirena possono essere sincronizzati col lampeggio od essere asincroni rispetto ad una o tutte e due le luci lampeggianti. video - spiegazioni