Io ho creato tre sequenze differenti per un personaggio: quella in cui è fermo(s1-s18), quella in cui avanza (f1-f6) e quella in cui indietreggia (b1-b6).
Mettiamo un'immagine, che chiameremo "thai" come esempio, nella nostra finestra e creiamo una proprietà custom che contenga la cartella con tutte le sequenze dell'animazione (chiamati frame o sprite).
![]() |
| Esempio di sprite |
on opencard put the filename of image thai into temp set itemdel to "/" put item 1 to -2 of temp into temp2 set the cartella of image thai to temp2 send fermo to image thaiend opencard
Poi ho scritto il codice per l'animazione quando rimane sul posto, il messaggio l'ho chiamato fermo. Ho creato una proprietà custom sprite che mi fa da contatore per l'ordine corretto delle immagini.
Se le immagini non sono tutte della stessa dimensione il baricentro si sposta e l'animazione potrebbe cominciare a muoversi, per questo è meglio memorizzare la posizione (proprietà loc) e reimpostarla dopo aver aggiornato lo sprite.
Bisogna stare attenti a creare un messaggio che chiama se stesso, non una sequenza ripetuta all'interno di un messaggio, altrimenti blocchereste il programma. Ecco il codice corretto dentro l'immagine:
on fermo put the cartella of me into cart put the sprite of me into spr add 1 to spr if spr > 16 then put 1 into spr end if set the sprite of me to spr put the loc of me into temploc put cart & "/s" & spr & ".png" into temp set the filename of image thai to temp set the loc of me to temploc send fermo to me in 0.2 sec end fermo
on cancellafermo repeat for each line templ in the pendingmessages if item 3 of templ is "fermo" then put item 1 of templ into temp cancel temp end if end repeatend cancellafermo
Come vedete l'immagine contiene sia il messaggio da ripetere per fare tutto il ciclo della sequenza che il messaggio per bloccarlo.
Adesso aggiungiamo i pulsanti per muovere il personaggio, ecco il codice per muoverlo in avanti:
on mouseUp call cancellafermo of image thai set the stato of image thai to "avanti" put the cartella of image thai into cart repeat for 2 times repeat with spr = 1 to 6 put cart & "/f" & spr & ".png" into temp put the item 1 of the loc of image thai into templocx put the item 2 of the loc of the image thai into templocy add 5 to templocx set the loc of the image thai to templocx,templocy set the filename of image thai to temp wait 0.2 sec end repeat end repeat send fermo to image thai end mouseUp
Siccome non voglio interruzioni durante la sequenza di movimento, ho usato un unico messaggio con un ciclo repeat all'interno. Ma fatelo solo se volete qualcosa che non possa mai essere interrotto. Di solito è meglio fare come nel caso della sequenza da fermo.
Usate anche lo stesso codice per il pulsante per andare indietro (basta sostituire -5 con 5) e avrete fatto.
Questo è il risultato e non c'è una riga di codice in più:

Nessun commento:
Posta un commento