Flash  »  Articoli  »  Tutorial Flash 

Personalizzare il menu contestuale

di: Davide Beltrame     19 Gennaio 2007

Menu intelligenti

Finora nelle funzioni richiamate dai menu abbiamo utilizzato dei riferimenti fissi. Questo non è l'ideale nel caso si abbiano più movieclip o nel caso si voglia associare uno stesso menu a due o più oggetti: supponiamo di voler associare "mio_menu" (che offre l'opzione "sposta") sia a "mc1" che a "mc2".

Possiamo stabilire a quale clip è stata richiesta l'azione. Quando l'utente seleziona un'opzione di un menu contestuale, viene inviato alla funzione un parametro contenente il nome dell'oggetto a cui era associato il menu, per cui è possibile conoscere da quale oggetto sia partita l'azione.

Modifichiamo allora il codice precedente associando lo stesso menu a entrambi gli oggetti.

mc1.menu = mc2.menu = mio_menu;

Quindi agiamo sulla funzione richiamata dalla voce sposta (ovvero muovi_mc) per farle ricevere e sfruttare il parametro contenente il nome del clip da cui parte il comando.

function muovi_mc(clip) {
  clip._x = 200;
}

Alla funzione arriverà il parametro "clip", contenente percorso e nome dell'oggetto su cui l'utente ha cliccato con il tasto destro per scegliere l'opzione "Sposta". Sarà quindi questo clip e solo lui ad essere spostato alla coordinata 200 sull'asse x.

Potremmo applicare lo stesso concetto a tutte le clip che vogliamo, associando anche a queste "mio_menu", senza che si renda necessaria alcuna altra modifica alla funzione.

Utilizzo di separatori

Nel caso di menu con più voci potrebbe essere necessario, per offrire un miglior aspetto al menu, l'utilizzo di linee di separazione tra le varie opzioni.

Questa operazione è molto semplice da eseguire: basta sfruttare il terzo parametro (opzionale) del costruttore ContextMenuItem, che consente di impostare un separatore prima della voce dichiarata dal costruttore.

var mio_menu:ContextMenu = new ContextMenu();
var voce1:ContextMenuItem = new ContextMenuItem("Sposta", muovi_mc);
var voce2:ContextMenuItem = new ContextMenuItem("Ingrandire",ingrandisci_mc,true);
var voce3:ContextMenuItem = new ContextMenuItem("Rimpicciolire",riduci_mc);
var voce4:ContextMenuItem = new ContextMenuItem("Riduci alpha",riducialpha_mc,true);
var voce5:ContextMenuItem = new ContextMenuItem("Aumenta alpha",aumentaalpha_mc);

mio_menu.customItems.push(voce1);
mio_menu.customItems.push(voce2);
mio_menu.customItems.push(voce3);
mio_menu.customItems.push(voce4);
mio_menu.customItems.push(voce5);
mio_menu.hideBuiltInItems()

function muovi_mc(clip) { clip._x = 200; }

function ingrandisci_mc(clip){
  clip._xscale += 10;
  clip._yscale += 10;
}

function riduci_mc(clip){
  clip._xscale -= 10;
  clip._yscale -= 10;
}

function riducialpha_mc(clip){ clip._alpha -= 10; }

function aumentaalpha_mc(clip){ clip._alpha += 10; }

mc1.menu = mc2.menu = mio_menu;

Creiamo tre gruppi di opzioni, e identifichiamo i "gruppi" tramite separatori: "voce2" e "voce4" hanno un terzo parametro impostato su true: questo parametro indica che prima di quella voce, nel menu verrà inserito un separatore.

Figura 6. Il menu con i separatori

Menu personalizzato con separatori

Abbiamo suddiviso i "gruppi" di opzioni: il primo relativo allo spostamento, il secondo alle modifiche di dimensione e il terzo alle modifiche alla trasparenza del movieclip. Sfruttando poi le funzioni e il parametro passato dal menu possiamo in ogni momento stabilire su qualche clip è stato scelto di eseguire l'operazione, in modo da sfruttare un solo menu per due (o più) oggetti.

Conclusioni

La classe ContextMenu, introdotta in Flash Mx 2004, trasforma la "croce" del menu contestuale in "delizia" per gli sviluppatori, consentendo la creazione di uno o più menu da associare agli elementi presenti sullo stage così da aggiungere delle opzioni o delle scorciatoie per l'utente.

Possiamo sfruttare un menu differente a seconda dell'oggetto e qualora ci trovassimo con più oggetti dello stesso tipo sapremo comunque quale è stato scelto dall'utente.

Ogni menu potrà contenere fino a 15 opzioni, eventualmente divise in gruppi tramite l'utilizzo dei separatori.

Alcuni sviluppatori inseriscono tramite ContextMenu i credits nel menu da tasto destro, eventualmente con link al proprio sito; questo metodo può essere utile per lasciare il proprio nome su un'applicazione senza doverlo applicare sullo stage.

Le possibilità offerta dalla classe ContextMenu sono molto numerose e vale la pena ricordarsene quando sviluppiamo i nostri progetti.

Guide Flash

Guida Flash Builder

Un percorso alla scoperta delle potenzialità più importanti...

Guida ActionScript 3 di base

Apprendere, in poche lezioni, le nozioni fondamentali per gestire...

Guida Papervision3D

Un percorso pratico alla scoperta di uno dei framework 3D più...

Altre guide

Newsletter @Flash

Ogni martedì, guide, articoli, FAQ, movie, audio su Macromedia Flash e Actionscript direttamente nella tua casella di posta

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Flash Designer

29 Marzo 2010 a Milano
Disponibilità: 6 Posti

Corso Flash Designer

08 Marzo 2010 a Roma
Disponibilità: 7 Posti

Corso Actionscript 3

19 Aprile 2010 a Roma
Disponibilità: 7 Posti