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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.