Le menu contextuel, c'est ce petit menu qui s'affiche quand on fait un clic droit sur un objet ; le plus souvent pour afficher des options comme couper / coller.

Pour Flash, le clic droit est un peu bloqué : on ne peut pas tout modifier, contrairement à ce qu'on pourrait faire en Javascript.

Mais on peut tout de même ajouter des éléments, et éviter l'affichage des options par défaut (« Zoom avant », « Zoom arrière »).

Pour cela, AS3 nous met deux classes à disposition : ContextMenu et ContextMenuItem (il y en a d'autre, mais ces deux là sont primordiales).

L'idée est simple : ContextMenu décrit le menu contextuel, et ContextMenuItem permet d'ajouter des éléments. Voyons ça plus en détail.

Masquer les éléments par défaut

Il s'agit ici de faire disparaître les options « Précédent », « Suivant », « Zoom avant »… disponibles par défaut.

On initialise un objet ContextMenu, et on appelle sa méthode hideBuiltInItems().

var ClicDroit:ContextMenu = new ContextMenu();
ClicDroit.hideBuiltInItems();

Ajouter des éléments personnalisés

Plus intéressant, on peut ajouter des éléments personnalisés. Voyons par exemple comment ajouter des éléments « Avancer d'un niveau » et « Reculer d'un niveau », et les connecter à des listeners :

var menuItemRestart:ContextMenuItem = new ContextMenuItem("Recommencer le niveau");
var menuItemPrevious:ContextMenuItem = new ContextMenuItem("Reculer d'un niveau");
var menuItemNext:ContextMenuItem = new ContextMenuItem("Avancer d'un niveau");
var myMenu:ContextMenu = new ContextMenu();


//Configurer le menu clic droit

//Connecter l'évenement "clic sur le menu" avec des fonctions (non montrées ici)
menuItemRestart.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,getSameLevel);
menuItemPrevious.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,getPreviousLevel);
menuItemNext.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,getNextLevel);

//Ajouter les éléments dans le menu clic droit.
myMenu.customItems.push(menuItemRestart);
myMenu.customItems.push(menuItemNext);
myMenu.customItems.push(menuItemPrevious);
contextMenu = myMenu;

Vous pouvez à tout moment interagir avec vos menus personnalisés, par exemple pour les rendre inactifs (propriété enabled) ou les masquer (visible)

Voilà qui devrait suffire pour une utilisation basique, RTFM pour une utilisation plus avancée ; par exemple pour masquer seulement certains éléments du menu par défaut ou ajouter des séparateurs...