Faire un menu en Flash (avec ActionScript 3)
Bonjour à tous,
J'ai créé un projet sous Flash CS4 et je développe un menu à la Deezer (du texte, et quand on clique dessus, le fond devient bleu). Pour celà, j'ai fais une classe que voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
package classes
{
// Les imports nécessaires à la classe
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
// La classe qui gère un sous menu
public class SousMenu extends MovieClip
{
// Attributs
private var fond:MovieClip; // Le fond derrière le texte
private var texte:MovieClip; // Le texte
private var surligne:Boolean; // Le sous menu a été cliqué ou non
private var couleurDefaut:ColorTransform; // La couleur par défaut du fond
private var couleurSurlignage:ColorTransform; // La couleur de surlignage du fond
private var tableau:Array; // Le tableau de tous les sous menus
// Constructeur
public function SousMenu(fond:MovieClip, texte:MovieClip)
{
// Si le fond et le texte ne sont pas null
if ((fond != null) && (texte != null))
{
// Attribution des valeurs pour les attributs
this.fond = fond;
this.texte = texte;
this.surligne = false;
// Active le mode bouton du MovieClip
this.fond.buttonMode = true;
// Définit la couleur par défaut et de surlignage (Bleu)
this.couleurDefaut = fond.transform.colorTransform;
this.couleurSurlignage = new ColorTransform();
this.couleurSurlignage.color = 0X57C1DB;
// Abonnement aux évènements
this.fond.addEventListener(MouseEvent.ROLL_OVER, activeSurlignage);
this.fond.addEventListener(MouseEvent.ROLL_OUT, enleveSurlignage);
this.fond.addEventListener(MouseEvent.CLICK, nouvellePage);
}
// Sinon, on affiche un message
else
{
trace("Objet mal créé !");
}
}
// Fonction qui active le surlignage
public function activeSurlignage(e:MouseEvent):void
{
// Donne l'accès au ColorTransform du fond
var couleur:ColorTransform = e.target.transform.colorTransform;
// On définit la couleur (bleu)
couleur.color = 0X57C1DB;
// On applique la couleur au fond
e.target.transform.colorTransform = couleur;
}
// Fonction qui enlève le surlignage
public function enleveSurlignage(e:MouseEvent):void
{
// Si on n'a pas cliqué
if (!(surligne))
{
// On réapplique la couleur par défaut au fond
e.target.transform.colorTransform = couleurDefaut;
}
}
// Fonction qui applique une couleur au fond et enregistre la nouvelle page à afficher
public function nouvellePage(e:MouseEvent):void
{
// On enregistre l'état du fond (surligné ou non)
var surlignage:Boolean = surligne;
for each (var sousMenu:* in tableau)
{
// On redéfinit la couleur par défaut pour tous les sous menus
sousMenu.getFond().transform.colorTransform = couleurDefaut;
sousMenu.setSurligne(false);
}
// On applique la couleur au fond
e.target.transform.colorTransform = couleurSurlignage;
// Le sous menu est surligné
surligne = true;
// TODO: Fix it !
//stage.swapChildren(fond, texte);
}
// Fonction qui enregistre tous les sous menus
public function setTableau(tableau:Array)
{
// Si le tableau n'est pas null
if (tableau != null)
{
// On enregistre le tableau
this.tableau = tableau;
}
// Sinon, on affiche un message
else
{
trace("Le tableau ne peut pas être assigné car il est null");
}
}
// Fonction qui enregistre l'état du fond (surligné ou non)
public function setSurligne(surligne:Boolean)
{
this.surligne = surligne;
}
// Fonction qui applique la couleur de fond
public function setCouleurSurlignage()
{
this.fond.transform.colorTransform = couleurSurlignage;
}
// Fonction qui retourne le fond
public function getFond():MovieClip
{
return fond;
}
}
} |
Quand je clique sur un sous menu, le fond bleu apparaît mais cache le texte. J'aimerais donc réafficher le texte par dessus en faisant un swapChildren sur le stage (voir ligne en rouge dans le code). Mais cela ne marche pas. Voici mon erreur :
Code:
1 2 3
|
TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at classes::SousMenu/nouvellePage() |
L'objet nul est surement le "stage" mais je n'arrive pas à supprimer l'erreur.
Pour information, voici le code que j'exécute dans mon fichier .fla :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
import classes.SousMenu;
// On crée les 5 sous menus
var presentation:SousMenu = new SousMenu(presentation_fond, presentation_txt);
var formation:SousMenu = new SousMenu(formation_fond, formation_txt);
var connaissances:SousMenu = new SousMenu(connaissances_fond, connaissances_txt);
var experiences:SousMenu = new SousMenu(experiences_fond, experiences_txt);
var langues:SousMenu = new SousMenu(langues_fond, langues_txt);
// On applique la couleur au fond du sous menu presentation (par défaut)
presentation.setCouleurSurlignage();
// Le sous menu est surligné
presentation.setSurligne(true);
// On crée un tableau de sous menus
var tableau:Array = new Array(5);
// On ajoute les sous menus au tableau
tableau.push(presentation);
tableau.push(formation);
tableau.push(connaissances);
tableau.push(experiences);
tableau.push(langues);
// On enregistre le tableau auprès des 5 sous menus
presentation.setTableau(tableau);
formation.setTableau(tableau);
connaissances.setTableau(tableau);
experiences.setTableau(tableau);
langues.setTableau(tableau); |
Auriez-vous une idée ?
Merci par avance.