Bonjour,

Je suis en train de créer un site en flash et je n'arrive pas à faire fonctionner le menu.
Avec des classes actionscipt, j'arrive à afficher le menu, faire déplacer un objet quand je clique sur un bouton mais je n 'arrive pas donner à mon flash le uid du xml référence du menu quand je clique sur un bouton.

Quatre bases de codes sur flash builder :

camping (mon fichier flash a son .as)

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
package fr.lebeaucamp.com
{
	import com.greensock.TweenMax;
	import com.greensock.easing.Quad;
	
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import fr.lebeaucamp.com.menu.Menu;
	import fr.lebeaucamp.com.menu.MenuEvent;
	import fr.lebeaucamp.com.menu.MenuItem;
	
	[Event(name="menuChange", type="fr.lebeaucamp.com.menu.MenuEvent")]
	public class Camping extends MovieClip
		
	{	public var menu:Menu;
		public var fondmenu:MovieClip;
		public var FLAG:MovieClip;
		public var Clogo:MovieClip;
		public var fond:MovieClip;
		public var logo:MovieClip;
		public var currentItem:MenuItem;
		public var source:MenuItem;
		public var id:MenuItem;
		
		
		
	
		public function Camping()
		{
			if(stage) init();
			else addEventListener( Event.ADDED_TO_STAGE, init );
			
		}
		
		
		private function init(event:Event = null ): void
		{
			removeEventListener( Event.ADDED_TO_STAGE, init );
			
			
			var n:int = numChildren;
			var ch:DisplayObject;
			for( var i:int = 0; i < n; i++)
			{
				ch = getChildAt(i);
				
				switch (ch)
				{ 
					case menu:
						TweenMax.from( ch, 1,{alpha:0, delay: 2, ease: Quad.easeOut } );
						break;
					
					default :
						TweenMax.from( ch, .6,{alpha:0, delay: .2*i, ease: Quad.easeOut } );
						break;
				}
			}
		
			
			
			
			addEventListener( MouseEvent.CLICK, onClick );
			
			function onClick( event:MouseEvent = null):void
			{
				if (event.target is MenuItem)
				{
				
					currentItem = MenuItem(event.target);
				
					TweenMax.to( FLAG, .4, {y: currentItem.y+135, ease:Quad.easeOut});
					
				}
			
			}
			addEventListener( MenuEvent.MENU_CHANGE, onMenuChange );
		
			function onMenuChange( event:MenuEvent ):void
			{	
				trace(currentItem.id);
			}
	}
		

	}}
Ensuite j'ai menu.as

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
package fr.lebeaucamp.com.menu
{
	import com.asual.swfaddress.SWFAddress;
	import com.greensock.TweenMax;
	import com.greensock.easing.Quad;
	
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.text.Font;
	
	import fr.lebeaucamp.com.menu.MenuEvent;
	import fr.lebeaucamp.com.menu.MenuItem;
	import fr.lebeaucamp.com.menu.Menu;

	
	
	public class Menu extends MovieClip
	{			
		public var FLAG:MovieClip;
		public var menu:Menu
		
		private var xmlLoader:URLLoader;
		private var xmlData:XML;
	//	private var menuItems:Array;
		private var currentItem:MenuItem;
		private var id:MenuItem;
		public function Menu()
		{
			init();
		}
	
		private function init():void
		{
			
			xmlLoader = new URLLoader();
			xmlLoader.addEventListener(Event.COMPLETE, onXMLLoadComplete );
			xmlLoader.load(new URLRequest('data/xml/menuac.xml' ));
			
		}
		
		private function onXMLLoadComplete (event:Event = null):void
		{
			
			xmlData = new XML(xmlLoader.data);
			//trace(xmlData.item);
			var items:XMLList = xmlData.item;
			var n:int =items.length();
			var mi:MenuItem;
			while (n--)
			{
				mi= new MenuItem(items[n]);
				mi.y = n*MenuItem.Item_HEIGHT;
				addChild(mi);
			}
			
			addEventListener( MouseEvent.CLICK, onClick );
						
		}
		
		private function onClick( event:MouseEvent = null):void
		{
			if (event.target is MenuItem && currentItem != event.target)
			{
						

				
				if (currentItem) currentItem.selected = false;
				currentItem = MenuItem(event.target);
				currentItem.selected = true;

				SWFAddress.setValue(currentItem.id)
				dispatchEvent( new MenuEvent(currentItem.id ));
			}
		}
	}
}
Suivi de menuitem.as

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
package fr.lebeaucamp.com.menu
{
	import com.greensock.TweenMax;
	
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	
	public class MenuItem extends Sprite
	{
		public static var Item_WIDTH:int = 220;
		public static var Item_HEIGHT:int = 35;

		public var source:XML; 
		private var field:TextField;
		private var _selected:Boolean;
		
		
		public function MenuItem(src:XML)
		{
			source = src;
			init();
		}
		
		
		private function init( event:Event = null ):void
		{
			mouseChildren = false;
			buttonMode = true;
			selected = false;
			
			field = new TextField();
			field.width = Item_WIDTH;
			field.height = Item_HEIGHT;
			field.selectable = false;
			field.embedFonts = true;
			field.defaultTextFormat = new TextFormat('Snap ITC', 16 , 0xEA0000, false, false, false, '', '', TextFormatAlign.LEFT, 45, 3); 
			field.text = source;
			addChild (field);
			
			addEventListener( MouseEvent.ROLL_OVER, onRollOver);
			addEventListener( MouseEvent.ROLL_OUT, onRollOut);

		}
	
		
		private function onRollOver( event:MouseEvent = null ):void
		{
			if (!_selected) TweenMax.to( this, .2, { tint:0x330033 });
		}
		
		private function onRollOut( event:MouseEvent = null ):void
		{
			if (!_selected) TweenMax.to( this, .45, { removeTint:true });
		}
		
		public function get id():String
		{
			return source.@uid;
		}
		
			
		public function set selected(v:Boolean):void
		{
			if (v)
			{
				_selected = true;
				buttonMode = false;
				mouseEnabled = false;
				TweenMax.to( this, .2, { tint:0xFF6600 });
			}
			else
			{
				_selected = false;
				buttonMode = true;
				mouseEnabled = true;
				onRollOut();
			}
		}
		
	}
}

Pour finir par menuevent.as

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
package fr.lebeaucamp.com.menu
{
	import flash.events.Event;
	import fr.lebeaucamp.com.menu.Menu;
	import fr.lebeaucamp.com.menu.MenuItem;

	
	public class MenuEvent extends Event
	{
		public static const  MENU_CHANGE:String = 'menuChange';
		
		public var itemID:String;
		
	
		public function MenuEvent(id:String, type:String = 'menuChange', bubbles:Boolean=false, cancelable:Boolean=false)
		{
			itemID = id;
			super (type, bubbles, cancelable);
		}
	}
}
En bidouillant un peu, j'ai remarqué qu'il chopait le uid mais le renommait plutot que de me le tracer comme valeur quand je clique dessus.

En rouge, la ligne de trace souhaitée.
En bleu, se qui touche à l'action.

Quand je compile, j'ai ça quand je clique sur sorties par exemple :
TypeError: Error #1034: Echec de la contrainte de type*: conversion de "land" en fr.lebeaucamp.com.menu.MenuEvent impossible.
at fr.lebeaucamp.com.menu::Menu/onClick()
Je ne désespère pas dans le sens où je vois qu'il va bien chercher l'uid du xml (land) mais le truc c'est qu'il ne sait pas quoi en faire plutot que de me le tracer.


Un petit conseil, s'il vous plait ? Je suis novice. ^^