Una delle
prime cose che si affronta quando si decide di imparare un
linguaggio di programmazione, a parte la logica dello stesso, è il
concetto di variabile.
Immaginate una variabile come un
cassetto o una scatoletta dove potete riporre qualcosa.
In questo caso quel qualcosa sono informazioni che vengono
memorizzate e possono quindi essere riprese e
riutilizzate in un secondo tempo.
Ma che tipo di informazioni ?
Solitamente, ne esistono di tre tipi:
| Numeriche |
Numeri che
possono essere trattati con operazioni matematiche e di
confronto |
| Stringhe |
Valori
alfanumerici (numeri e lettere) che hanno sempre una
valenza di testo |
| Logiche |
Informazioni
particolari che comprendono due soli valori: Vero (True)
o Falso (False).
Flash utilizza anche il valore numerico zero
trattandolo come Falso, mentre qualsiasi altro corrisponde a
Vero. |
| Come si definisce una variabile |
Solitamente, nei normali
linguaggi di programmazione, si devono compiere due operazioni: la
definizione del suo nome e del suo tipo.
In parole povere bisogna prima dare un nome, ad esempio: Pippo (un
sacco di fantasia, lo so...) e poi definire di che tipo
di variabile si tratta (per esempio numerica o testo) in base al
dato che dovrà ospitare.
Una volta fatte queste due operazioni, la variabile è pronta per
accettare un tipo di dato e solo quello.
Quindi se impostiamo la variabile Pippo come numerica, non
possiamo poi decidere di usarla per memorizzare delle stringhe o
viceversa.
In Flash le cose non stanno
proprio così (e se no che divertimento ci sarebbe ?) .
Nel linguaggio ActionScript
questa distinzione per il tipo di variabile non esiste e
cioè non è necessario definire a priori una variabile.
Anzi, se vogliamo dirla tutta, è impossibile.
Questo cosa vuol dire ?
Che in Flash, una variabile viene determinata dal contesto
al quale è applicata.
In pratica in una variabile i numeri possono essere trattati come
stringhe e viceversa e il modo con cui una variabile viene
valutata dipende dalla variabile stessa e cioè se è scritta come
stringa, numero o dato logico.
So che adesso sembra un casino,
ma poco per volta vedrete che le cose si chiariranno.
In Flash, il modo classico di
impostare una variabile è usando l'action Set Variable
dall'elenco delle action disponibili per l'inserimento in un frame.

Nel box chiamato Variable
si inserisce il nome della variabile e comparirà subito dopo i due
punti del comando.
Nel box chiamato Value si inserisce il valore o
l'espressione che deve contenere la variabile e comparirà nella
parte destra dell'istruzione.
Il riquadro a fianco del box Value è dove potete scegliere
che tipo di dato volete assegnare alla vostra variabile e quindi,
che tipo di variabile volete che essa diventi.
String Literal significa stringa letterale e cioè un valore
alfanumerico.
Expression significa espressione e comprende sia i valori
numerici che le espressioni (queste ultime comunque
finiscono sempre per dare un valore, quindi...).
Per quanto riguarda i valori logici, questi si prendono
dalle espressioni o da istruzioni di Flash.
Facciamo qualche esempio.
| Set Variable: "Pippo" = "a" |
La variabile di nome Pippo
è di tipo String Literal (alfanumerico) e contiene la
stringa a |
| Set Variable: "Pippo" = "1" |
La variabile di nome Pippo
è di tipo String Literal (alfanumerico) e contiene la
stringa 1 |
Ma nella seconda c'è un 1, come
fa ad essere una stringa ?
Per due motivi: il primo è che una stringa può contenere
caratteri alfanumerici e cioè sia lettere che numeri e
il secondo che il numero uno è racchiuso tra virgolette,
cosa che fa diventare il numero una stringa. |
| |
| Set Variable: "Pippo" = 1 |
La variabile di nome Pippo
è di tipo Expression (Numerico) e contiene il valore
1 |
| Qui le virgolette non ci sono e
quindi il numero uno rimane un valore. |
Tutto chiaro fino a qui ?
Come vedete, la stessa istruzione può generare diversi tipi di
variabile, che sono definiti dal contesto che decidete.
| Come si usa una variabile |
Qui le cose si fanno ancora più contorte...
preparatevi.
L'istruzione Set Variable
non fa solo la definizione, ma può anche compiere delle
operazioni.
Non è assolutamente detto che il contenuto di una variabile debba
rimanere immutato, la maggior parte delle volte infatti questo
cambia a seconda di quello che vogliamo far eseguire al programma
o del valore di cui abbiamo bisogno.
Esempio:
Abbiamo detto che Set Variable: "Pippo" = 1 vale appunto,
1.
Ma se scriviamo Set Variable: "Pippo" = 1 + 1, la variabile
varrà 2.
Ma perchè non scriviamo
direttamente il valore due ?
Perchè quella che abbiamo appena fatto si chiama Espressione
(in questo caso numerica, ma le vediamo dopo) e cioè un
calcolo.
Tanto per farvi venire un altro
po' di mal di testa, sappiate che le variabili possono essere
usate tra di loro.
Esempio:
Set Variable: "Pippo" = 1
Set Variable: "Pluto" = 1
Set Variable: "Paperino" = Pippo + Pluto
In questo caso abbiamo definito due variabili (Pippo e
Pluto) di valore 1 e poi ne abbiamo definita una terza (Paperino)
che è la somma delle precedenti e che vale 2.
Se invece vogliamo per esempio
confrontare il risultato di una variabile per definirne una
seconda, si può fare così:
If (Pippo=1)
Set Variable: "Pluto" = "Pippo vale 1"
Else
Set Variable: "Pluto" = "Pippo non vale 1"
End If
Quello che abbiamo appena
costruito si chiama Istruzione condizionata.
Praticamente abbiamo detto a Flash di controllare la variabile
Pippo e di definire la variabile Paperino a seconda di
quello che vale Pippo.
Il ciclo funziona così:
| If (Pippo=1) |
Se Pippo vale
1 |
| Set Variable: "Pluto" =
"Pippo vale 1" |
Allora setta Pluto con
questa stringa |
| Else |
Se no, se invece non vale
1 |
Set Variable: "Pluto" =
"Pippo non vale 1"
|
Allora setta Pluto con
questa stringa |
| End If |
Fine |
E questo è il risultato in Flash
AAAAAAAH... c'è una casella che
cambia da sola !!!
E come fa ?
Semplicemente perchè è un
Campo di testo.
Questo particolare oggetto ha una particolarità: nelle sue
proprietà si può definire un nome di variabile e se questo nome
corrisponde a quello di una variabile definita con un Set
Variable questa casella mostrerà o registrerà il suo valore.
In pratica:
Un altro uso delle variabili
molto diffuso (e utile) nei movies è associato ai contatori.
Come dice la parola stessa, un contatore conta.
Le applicazioni sono molteplici:
- barre di progresso
- incrementi
- loop attraverso gli stessi frames
- ecc.
Mettiamo caso di voler ripetere
i frames che vanno da 10 a 20 per tre volte prima di passare al
frame 21.
Basta inserire nel frame 20 queste actions:
Set Variable: "contatore" =
contatore + 1
If (contatore < 3)
Go To and Play (10)
End If
Ed ecco il nostro bel contatore
che funziona così:
| Set Variable: "contatore" =
contatore + 1 |
Setta la variabile contatore
con un valore che vale la stessa variabile + 1
NOTA BENE: dato che contatore non è stata
definita in precedenza, al primo passaggio vale 0 e quindi si
ha un risultato di 1 per effetto della somma. |
| If (contatore < 3) |
Se contatore è minore di
3 |
| Go To and Play (10) |
Allora vai al frame 10 e
riproduci |
| End If |
Fine del ciclo di controllo e
quindi passaggio al frame 21 |
| Le variabili e gli operatori |
Nella prima parte abbiamo visto alcuni esempi
di come si possono usare le variabili.
Però, per eseguire un'espressione o un confronto c'è bisogno
degli operatori.
Si definisce operatore un elemento
utilizzato per valutare delle espressioni, per concatenare delle
stringhe o per confrontare numeri e stringhe.
Essi si dividono in:
OPERATORI NUMERICI
Seguono le normali regole esistenti in matematica,
quindi:
- le operazioni tra parentesi vengono eseguite prima
- seguono moltiplicazione e divisione
- per finire con addizione e sottrazione |
|
( ) |
Le classiche parentesi tonde.
Sono usate per dare la precedenza in un calcolo, cioè quello
che è racchiuso tra di loro viene calcolato per primo. |
|
+ |
Somma |
|
- |
Sottrazione |
|
* |
Moltiplicazione |
|
/ |
Divisione |
|
= |
Uguale (ritorna un valore True/False
- vero/falso) |
|
<> |
Non uguale, differente |
|
< |
Minore di |
|
> |
Maggiore di |
|
<= |
Minore o uguale a |
|
>= |
Maggiore o uguale a |
|
OPERATORI DI STRINGA |
|
"" |
Doppie virgolette, usate per
definire una stringa all'interno di un'espressione |
|
& |
Concatenazione di stringa
Esempio: Pippo & Pluto ritorna una stringa PippoPluto
(senza lo spazio) |
|
eq |
Equal - Uguale a |
|
ne |
Not equal - Diverso da |
|
lt |
Less than - Minore di |
|
gt |
Greater than - Maggiore di |
|
le |
Less equal - Minore o uguale a |
|
ge |
Greater equal - Maggiore o
uguale a |
|
OPERATORI LOGICI |
|
not |
non questo, tutto tranne questo |
|
and |
sia questo che quello |
|
or |
o questo o quello |
Tanto per ritornare al discorso della
variabile che viene definita in base al contesto, anche
l'operatore fa la sua bella parte.
Per esempio::
1 + 5 viene
valutato come valore grazie all'operatore numerico + e
quindi si avrà 6
1 + A viene valutato come valore grazie all'operatore
numerico + e quindi si avrà 1
1 & 5 viene valutato come stringa grazie all'operatore di
stringa & e quindi si avrà 15
1 & A viene valutato come stringa grazie all'operatore di
stringa & e quindi si avrà 1A
Occhio quindi a quale operatore inserite...
Solito esempio Flash per chiarire le idee:
| Le variabili e gli espressioni |
Ed eccole qui.
In Flash ne esistono di tre tipi: numeriche, stringhe e logiche.
Da brave figliolette della matematica possono essere nidificate
(cioè un'espressione ne può contenere un'altra e così via) ma
comunque il risultato finale viene sempre riportato e valutato
come uno di questi tre tipi.
Espressioni numeriche
Il risultato è sempre un numero ed
è composta da un operatore numerico più un numero, una
variabile definita come numerica oppure una funzione che
restituisce come risultato un valore numerico. |
| Esempio |
Set Variable: "Pippo" = 1
+ 1 |
La variabile varrà 2 |
| Esempio strano |
Set Variable: "Pippo" = 1
+ "1" |
Anche in questo caso la
variabile varrà 2, anche se il secondo 1 è racchiuso tra
virgolette e quindi è una stringa.
Questo perchè se una stringa contiene solo caratteri
numerici e se l'operatore è numerico, essa verrà
valutata come numero (un'aspirina, grazie...). |
| Esempio ancora più strano |
Set Variable: "Pippo" = 1
+ "1 " |
In questo caso la variabile
varrà 1, perchè se fate attenzione, tra le virgolette del
secondo 1 è racchiuso anche uno spazio.
Questo fa sì che non contenga solo caratteri numerici e
quindi viene trattata come stringa.
E dato che non si possono sommare numeri e lettere, il
risultato sarà solo la parte numerica dell'espressione e
cioè il primo 1. |
Espressioni di stringa
Il risultato è sempre una stringa
ed è composta da un operatore stringa più un testo tra
virgolette, una variabile definita come stringa oppure una
funzione che restituisce come risultato una stringa. |
| Esempio |
Set Variable: "Pippo" =
"Pippo" |
Mi sembra che le spiegazioni
siano superflue |
| |
Set Variable: "Pippo" =
"1"&"1" |
Restituisce la stringa
11 |
Espressioni logiche
Il risultato è sempre una valore
booleano e perciò Vero o Falso ed è composta
da un operatore logico più un confronto stringa, un
confronto testo oppure una funzione che restituisce come
risultato un valore logico.
Solitamente si usano nelle istruzioni condizionali (come un
ciclo If...Then...Else) oppure nei cicli ripetitivi
(come Loop While) ma anche l'action Set Variable
può ospitarle.
In Flash, True (Vero) restituisce 1 e False
(Falso) restituisce 0. |
I confronti analizzano due espressioni tra di
loro e ne riportano sempre solo due risultati: Vero o Falso.
Ne esistono di due tipi: numerici e di stringa.
Confronti numerici
Confrontano due espressioni tra di
loro in base ai numeri che contengono.
Il risultato è sempre 1 per Vero e 0 per Falso e se una
delle due espressioni non può essere convertita in un numero
il risultato sarà Falso e quindi 0. |
| Esempio |
Set Variable: "Pippo" =
"10 < 5" |
Falso -
10 non è minore di 5 |
| |
Set Variable: "Pippo" =
"(11+4) = 15" |
Vero -
11+4 è uguale a 15 |
Confronti tra stringhe
Confrontano due espressioni tra di
loro in base ai ai caratteri che contengono.
Il risultato è sempre 1 per Vero e 0 per Falso.
La valutazione avviene partendo dal primo carattere a
sinistra della stringa per arrivare fino all'ultimo e si
serve dei codici ASCII per poter effettuare il confronto.
E' case sensitive, cioè è sensibile alle maiuscole e
minuscole (infatti le maiuscole hanno valori ASCII inferiori
alle minuscole). |
| Esempio |
Set Variable: "Pippo" =
"Pino eq Gino" |
Falso -
La prima lettera non è uguale |
| |
Set Variable: "Pippo" =
"Pino gt Pini" |
Vero -
la lettera finale o ha un valore ASCII
di 111 mentre i ha un valore di 105, quindi è vero
che Pino è maggiore di Pini |
| |
Set Variable: "Pippo" =
"Sasso gt Saso" |
Vero -
Sasso ha una lettera in più di Saso |
Tanto per continuare a complicare le cose, i
confronti possono essere concatenati tra di loro utilizzando gli
operatori logici AND e OR (ripeto qui sotto la
parte di tabella interessata).
|
OPERATORI LOGICI |
|
and |
sia questo che quello |
|
or |
o questo o quello |
Questa particolarità offre ai confronti di
agire in situazioni più ampie rispetto a prima.
Per esempio:
(Pippo >= 10) AND (Pippo <= 100)
In questo caso, se Pippo sarà un numero compreso tra 10 e 100,
l'espressione porterà Vero, mentre minore di 10 o
maggiore di 100 porterà Falso.
Con l'operatore logico AND tutte e due le espressioni
devono essere Vero se si vuole avere come risultato
Vero.
Se anche solo una delle due è Falso, si avrà di ritorno
come risultato Falso.
(Pippo = 10) OR (Pippo = 100)
Se Pippo sarà 10 oppure 100,
l'espressione porterà Vero, altrimenti porterà Falso.
Con l'operatore logico OR basta che una delle due
espressioni sia Vero se si vuole avere come risultato
Vero.
Per ottenere Falso, bisognerà che tutte e due le
espressioni siano Falso.
Per comodità, questa è una tabella dove
vengono prese in esame varie situazioni che coinvolgono le
espressioni logiche.
|
Primo valore
|
Operatore logico
|
Secondo valore
|
Risultato finale
|
|
Falso
|
AND
|
Falso
|
Falso
|
|
Vero
|
AND
|
Falso
|
Falso
|
|
Falso
|
AND
|
Vero
|
Falso
|
|
Vero
|
AND
|
Vero
|
Vero
|
|
Falso
|
OR
|
Falso
|
Falso
|
|
Vero
|
OR
|
Falso
|
Vero
|
|
Falso
|
OR
|
Vero
|
Vero
|
|
Vero
|
OR
|
Vero
|
Vero
|
| I percorsi delle variabili |
Abbiamo visto cosa sono, come
si definiscono e come si usano le variabili.
Ora vediamo come si richiamano e come si possono definire da un
posto per crearle in un altro.
COME SI RICHIAMANO
La cosa è molto più semplice di quello che sembra.
Una cosa che bisogna ricordare
è questa: una variabile creata sulla
timeline principale non esiste per un movie clip o un .swf
esterno e vicecersa.
Tuttavia, e possibile
richiamarle tramite percorso.
Se si devono richiamare delle variabili sulla stessa timeline,
basta indicarne il nome.
Se invece la variabile da richiamare risiede su un'altra
timeline, per esempio quella di un'altro movie clip o quella del
movie principale, bisognerà inserirne il percorso completo.
Il metodo usato per indicare
questi percorsi è identico a quello usato dall'azione
Tell
Target (il link porta al tutorial apposito) con in più
una piccola differenza: prima bisogna inserire il percorso e
poi, separato dai due punti ( : ) si indica il nome della
variabile.
Anche qui, ricordatevi che uno slash ( / ) indica un
percorso assoluto, mentre due punti di seguito ( .. )
indicano un percorso relativo.
| Esempio |
/movieclip1:Pippo |
Viene richiamata la variabile
Pippo che risiede all'interno del Movie Clip
Movieclip1 |
| |
/movieclip1/movieclip2:Pippo |
Viene richiamata la variabile
Pippo che risiede all'interno del Movie Clip
Movieclip2 che a sua volta risiede all'interno del Movie
Clip Movieclip1 |
COME SI DEFINISCONO IN UN
POSTO PER CREARLE IN UN ALTRO
Prima abbiamo visto come si
definisce una variabile tramite l'action Set Variable.
Però abbiamo sempre fatto esempi con una variabile che veniva
creata, risiedeva e doveva essere usata nella stessa timeline.
A volte però si può presentare la necessità di creare la
variabile da una timeline per poterla memorizzare in un altra
timeline.
Anche qui si usa la tecnica dei percorsi.
| Esempio |
Set Variable: "Pippo" = 1 |
Viene creata la variabile
Pippo e risiede nella stessa timeline |
| |
Set Variable: "mc:Pippo" =
1 |
Viene creata la variabile
Pippo e risiede nella timeline di un movie clip con nome
di istanza mc |
| |
Set Variable: "..:Pippo" =
1 |
Partendo da un movie clip che
risiede sulla scena principale, viene creata la variabile
Pippo sulla timeline principale usando un percorso
relativo |
| |
Set Variable:
"../mc2:Pippo" = 1 |
Partendo da un movie clip
viene creata la variabile Pippo su un altro movie
clip usando un percorso relativo |
| |
Set Variable:
"/mc1/mc2:Pippo" = 1 |
Partendo da un movie clip
viene creata la variabile Pippo su un altro movie
clip usando un percorso assoluto |
Una variabile può anche essere
generata o raggiunta in un .swf esterno tramite l'action Load
Movie.
In questo caso il livello al quale è stato caricato il movie
sarà indicato prima di indicare il nome della variabile.
| Esempio |
Set Variable:
"_level1/:Pippo" = 1 |
Il movie padre è A che
carica il movie B.
La variabile viene creata da A e usata da B. |
Ma il più bello l'ho lasciato
per ultimo... :-)
Credeteci o no, le variabili possono essere anche generate fuori
dal movie e più precisamente da una stringa di query in un
tag html o usando JavaScript.
| Da una stringa di query in
un tag HTML: |
Create un movie nuovo e
disegnate all'interno un campo di testo vuoto con nome di
variabile text.
Salvatelo con il nome movie.fla e pubblicate sia il .swf
che il .html
Con un editor di testo (va bene anche il notepad) aprite il
file movie.html e cercate il tag OBJECT.
All'interno di questo tag, trovate questa istruzione
<PARAM NAME=movie VALUE="movie.swf">
Alla fine di "movie.swf" aggiungete "?text=ciao"
in questo modo
<PARAM NAME=movie VALUE="movie.swf?text=ciao">
Ora cercate il tag EMBED e ripetete
l'operazione in modo da avere questa stringa
<EMBED src="movie.swf?text=ciao">
(è un po' più corta)
Salvate il file, sovrascrivendo quello
vecchio.
Se ora provate a lanciare il movie Flash
dal file html, vedrete che dentro la casella di testo ci
sarà la parola ciao. |
NOTA BENE
Con questo sistema possono essere
passate anche variabili multiple usando la sintassi
movie.swf?variabile1=valore&variabile2=valore&variabile3=valore
Assegnate i valori sia nel tag OBJECT
che nel tag EMBED in modo da avere la piena
compatibilità con tutti i browsers.
Invece con Internet Explorer per Mac, se rimanete in locale
(ossia off-line) non vedrete un bel niente.
Per poterlo visualizzare dovrete fare un upload sul vostro
sito sia del .swf che del .html e digitare sul browser
l'indirizzo completo compreso di http:// |