Adesso non rimane che definire la funzione che permetterà al menu di fare qualcosa. Come abbiamo già detto, la pressione di uno dei pulsanti,
richiamerà una funzione che si chiama comandi, alla quale come variabile viene inviato il nome di istanza del movieclip PulsanteFuori che
contiene il pulsante. In pratica, se premo sul movieclip "homepage", alla root arriverà il comando:
comandi("home");
L'aver usato una funzione, ci permette di non dover più toccare i pulsanti, per cambiare le azioni corrispondenti: basterà modificare la
funzione per rispondere alle nostre esigenze.
Selezioniamo il primo frame del filmato sulla timeline principale, e apriamo il pannello Azioni: scriviamo il seguente codice
function comandi (nome) {
loadMovieNum (nome + ".swf", 1);
}
Molto semplicemente la funzione riceve come parametro il nome di istanza del movieclip che contiene il pulsante, e assegna questo parametro
alla variabile nome. Quindi carica un filmato esterno, sul livello 1, che si chiama come la variabile più la stringa ".swf":
in parole povere, se clicco il pulsante dentro il movieclip slide, la funzione carica sul livello 1 il filmato slide.swf.
D'altronde, premendo più volte lo stesso pulsante, caricheremmo altrettante volte lo stesso filmato: effetto decisamente sgradevole, e
oltretutto non innocuo. Se infatti stiamo utilizzando il filmato esterno, e lo carichiamo di nuovo, perdiamo tutte le variabili e le
impostazioni raggiunte a quel momento.
Inseriamo quindi un semplice controllo sul nome della variabile. Se è la stessa, allora non caricare di nuovo: o meglio, carica solo se è
diversa dall'ultima impostata. Inoltre, dobbiamo inserire un nome di partenza: quello della homepage, in modo che all'avvio del
filmato, sia come se avessimo premuto il pulsante "homepage".
ultimo = "home";
function comandi (nome) {
if (nome != ultimo) {
loadMovieNum (nome + ".swf", 1);
}
ultimo = nome;
}
In questo modo con la prima riga abbiamo impostato il valore della variabile ultimo, che conterrà il nome dell'ultimo pulsante
premuto. Al richiamo della variabile, avviene un confronto tra ultimo e nome: se sono diversi, viene caricato il filmato esterno corrispondente, e il valore di ultimo diventa quello di nome.
Adesso però abbiamo un problema: premendo home, non abbiamo alcun filmato da caricare, dal momento che home corrisponde al filmato
principale. Allora, una volta verificato che ultimo sia diverso da nome, se il pulsante premuto è home, allora scarichiamo il livello
1, altrimenti carichiamo il filmato esterno corrispondente.
ultimo = "home";
function comandi (nome) {
if (nome != ultimo) {
if (nome == "home") {
unloadMovieNum (1);
} else {
loadMovieNum (nome+".swf", 1);
}
ultimo = nome;
}
}
Fin qui ci siamo. Ora dobbiamo tornare al fatto che, una volta premuto un pulsante, questo si ferma al frame 11, in modo che sia completamente
bianco, ed escludendo le animazioni di rollover e rollout. Quindi, quando premiamo un pulsante, quello premuto precedentemente, fisso sul
bianco, deve tornare gradualmente al giallo. Inoltre, come per la variabile ultimo, già impostata all'avvio del filmato, dobbiamo impostare
il pulsante homepage come se fosse già stato premuto.
Per questo motivo, ricapitolo come raggiungere i pulsanti contenuti nel movieclip menu. Sullo stage abbiamo il movieclip menu con nome
di istanza menu: questo contiene i sei movieclip pulsanteFuori, con i nomi di istanza riferiti alle sezioni. Dentro ognuno di questo
movieclip, c'è il movieclip pulsanteDentro, nome di istanza interno, all'interno del quale si svolge l'animazione di
rollover. Ad ognuno dei movieclip pulsanteDentro, è associato lo script per l'animazione, e anche il controllo sulla pressione del
movieclip stesso.
Come abbiamo già visto, il movieclip è fermo al frame 11, e bloccato dalla variabile premuto, che è vera. Dobbiamo quindi, alla pressione di
un nuovo pulsante, riprendere la riproduzione dell'animazione del pulsante premuto precedentemente, e far tornare falsa la variabile
premuto.
Se ad esempio l'ultimo pulsante premuto era home, e vogliamo ripristinarlo, il percorso che ci interessa sarà:
menu.home.interno
per avviare la riproduzione useremo:
menu.home.interno.play();
per resettare la variabile:
menu.home.interno.premuto = false;
Inoltre useremo una particolare notazione: movieclip[variabile].comando
Questo significa che, avendo una variabile che contiene il nome di un movieclip, possiamo utilizzarla per completare il percorso. Se il
valore di ultimo è "home", la scrittura
menu[ultimo].interno.premuto = false;
corrisponderà a:
menu.home.interno.premuto = false;
ultimo = "home";
menu[ultimo].interno.premuto = true;
menu[ultimo].interno.gotoAndStop(11);
function comandi (nome) {
if (nome != ultimo) {
if (nome == "home") {
unloadMovieNum (1);
} else {
loadMovieNum (nome + ".swf", 1);
}
menu[ultimo].interno.premuto = false;
menu[ultimo].interno.play();
ultimo = nome;
}
}
Nel dettaglio:
// settiamo come ultimo "home" (è come se avessimo
// premuto "home" all'avvio)
ultimo = "home";
// blocchiamo il rollover del pulsante "home"
menu[ultimo].interno.premuto = true;
// mandiamo il movieclip "home" al frame 11
menu[ultimo].interno.gotoAndStop(11);
function comandi (nome) {
if (nome != ultimo) {
if (nome == "home") {
unloadMovieNum (1);
} else {
loadMovieNum (nome + ".swf", 1);
}
// resettiamo la variabile "premuto" del pulsante
// attivato precedentemente
menu[ultimo].interno.premuto = false;
// riavviamone la riproduzione
menu[ultimo].interno.play();
ultimo = nome;
}
}