In pratica si bloccano tutti i movimenti (lock moves), si danno a tutti gli oggetti il comando di muoveri (move) e poi si lancia unlock moves. In questo modo i comandi di movimento verranno eseguiti contemporaneamente.
Esempio:
Se poi noi vogliamo mandare dei comandi asincroni, la questione è più complicata.
Ad esempio per ottenere il seguente programma:
bisogna considerare questo:
- solo un movimento per messaggio
- utilizzare l'opzione without waiting
- calcolare il tempo del movimento
- alla fine del messaggio, se servono altri movimenti, utilizzare send in xx sec per lanciare un altro messaggio contenente il nuovo movimento. La variabile xx deve essere il tempo per eseguire il movimento del messaggio corrente.
on mouseUp put the number of me into temp if the label of me is not "stop" then set the label of me to "STOP" set the backgroundColor of me to "red" set the muovi of me to true movimento temp else stop moving graphic temp repeat for each line tLine in the dafare of me cancel tLine end repeat set the dafare of me to empty set the label of me to "START" set the backgroundColor of me to "green" set the muovi of me to false end if end mouseUp
on movimento ogg #put ogg, temp put the loc of me into temp if the direzione of graphic ogg is "+" then set the direzione of graphic ogg to "-" add -70 to item 2 of temp move graphic ogg to temp without waiting else set the direzione of graphic ogg to "+" add -156 to item 2 of temp move graphic ogg to temp without waiting end if if the muovi of me then put the dafare of me into temp2 send ("movimento " & ogg ) to me in 0.5 sec put the result & return after temp2 set the dafare of me to temp2 end if #put tempend movimento
mentre il codice del programma sincrono è:
on mouseUp lock moves repeat with i=1 to 8 send "movimento " & i to button i end repeat unlock movesend mouseUp
Nessun commento:
Posta un commento