Novice en flash (code), je travaille depuis 1 mois et demi sur mon site. Oui c'est long, mais je découvre et essaie de faire les choses dans les règles.
Là où je bloque c'est sur le SWFAddress. Je voudrais deux choses :
Que la barre d'adresse s'actualise en fonction de la partie sélectionnée dans le menu (mon trace affiche le bon resultat à chaque click).
Que je puisse utiliser les fleches du navigateur (préc / suiv).
J'ai tout codé via des tutos pour obtenir ceci. Je suis plutôt sûr de mon code, les fichiers js et as du swfaddress sont à la bonne place. Et pourtant ça ne marche pas. Alors oui il y a un problème. MAis lequel ?
Voici le code de mon menu :
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 package fr.noe.dvd.menu { import com.asual.swfaddress.SWFAddress; import com.asual.swfaddress.SWFAddressEvent; import com.greensock.TweenMax; import com.greensock.easing.Quad; import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.navigateToURL; import flash.utils.Dictionary; import flash.utils.setTimeout; import fr.noe.dvd.menu.MenuEvent; import fr.noe.dvd.menu.MenuItem; [Event(name="menuChange", type="fr.noe.dvd.menu.MenuEvent")] public class Menu extends MovieClip { public var MenuMask:MovieClip; public var menuTexture:MovieClip; private var xmlLoader:URLLoader; private var xmlData:XML; //private var menuItems:Array; private var currentItem:MenuItem; public function Menu() { init() } private function init():void { menuTexture.mask = MenuMask; xmlLoader = new URLLoader(); xmlLoader.addEventListener(Event.COMPLETE, onXMLLoadComplete ); xmlLoader.load( new URLRequest( 'data/xml/menu.xml' ) ); } private function onXMLLoadComplete( event:Event = null ):void { xmlData = new XML( xmlLoader.data ); 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 ); var path:String = SWFAddress.getPath(); if ( path.length < 2 ) { selectID( items[0].@uid ); } SWFAddress.addEventListener( SWFAddressEvent.EXTERNAL_CHANGE, onSWFAddressChange ); } private function onClick( event:MouseEvent = null ):void { if ( event.target is MenuItem && currentItem != event.target ) { if ( currentItem ) currentItem.selected = false; selectItem( MenuItem( event.target ) ); SWFAddress.setValue( currentItem.id ); } } private function onSWFAddressChange( event:SWFAddressEvent ):void { if ( event.pathNames.length ) { var nid:String = event.pathNames[0]; if ( !currentItem || currentItem.id != nid ) { selectID( nid ); } } } private function selectID( nid:String ):void { var n:int = numChildren; var d:DisplayObject; while( n-- ) { d = getChildAt( n ); if ( d is MenuItem && MenuItem(d).id == nid ) { selectItem( MenuItem(d) ); break; } } } private function selectItem( ni:MenuItem ):void { if ( currentItem ) currentItem.selected = false; currentItem = ni; currentItem.selected = true; TweenMax.to( MenuMask, .4, { y: currentItem.y, ease: Quad.easeOut } ); dispatchEvent( new MenuEvent( currentItem.id ) ); } } }
Mon MenuEvent :
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 package fr.noe.dvd.menu { import flash.events.Event; import fr.noe.dvd.menu.MenuItem; import fr.noe.dvd.menu.Menu; 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); } } }
Au cas où, mon MenuItem :
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 package fr.noe.dvd.menu { import com.greensock.TweenMax; import com.greensock.easing.Quad; import com.asual.swfaddress.SWFAddress; import com.asual.swfaddress.SWFAddressEvent; import fr.noe.dvd.menu.MenuEvent; 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 = 150; public static var ITEM_HEIGHT:int = 24; public var source:XML; private var field:TextField private var _selected:Boolean; public function MenuItem( src:XML ) { source = src; init(); } private function init( ):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( 'Caviar Dreams', 20, 0xffffff, false, false, false, '', '', TextFormatAlign.RIGHT, 0, 4 ); 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:0xff0000 } ); } 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, .6, { tint:0x000000} ); } else { _selected = false; buttonMode = true; mouseEnabled = true; onRollOut(); } } } }
Et tant que j'y suis, ma page :
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 package fr.noe.dvd { import com.greensock.TweenMax; import com.greensock.easing.Quad; import com.asual.swfaddress.SWFAddress; import com.asual.swfaddress.SWFAddressEvent; import flash.display.DisplayObject; import flash.display.MovieClip; import flash.events.Event; import fr.noe.dvd.menu.Menu; import fr.noe.dvd.menu.MenuEvent; public class Noetevisdub extends MovieClip { public var navig:MovieClip; public var fond01:MovieClip; public var fond02:MovieClip; public var fond03:MovieClip; public var codeV:MovieClip; public var codeH:MovieClip; public var mec:MovieClip; public var bas_mec:MovieClip; public var real:MovieClip; public var texte:MovieClip; public var menu:Menu; public function Noetevisdub() { 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 d:DisplayObject; for( var i:int = 0; i < n; i++) { d = getChildAt(i); switch( d ) { case fond03: TweenMax.from( d, 1, { alpha: 0, x: +d.width, ease: Quad.easeOut } ); break; case fond01: TweenMax.from( d, .5, { alpha: 0, x: -d.width, delay: .5, ease: Quad.easeOut } ); break; case fond02: TweenMax.from( d, .5, { alpha: 0, x: -d.width, delay: .5, ease: Quad.easeOut } ); break; case navig: case menu: TweenMax.from( d, 3, { alpha: 0, delay: 1, ease: Quad.easeOut } ); break; case codeV: TweenMax.from( d, .5, { alpha: 0, delay: 2, ease: Quad.easeOut } ); break; case codeH: TweenMax.from( d, .5, { alpha: 0, delay: 2.5, ease: Quad.easeOut } ); break; case mec: TweenMax.from( d, 2, { alpha: 0, x: -d.width, delay: 1, ease: Quad.easeOut } ); break; case bas_mec: TweenMax.from( d, 1, { alpha: 0, x: -d.width, delay: 2, ease: Quad.easeOut } ); break; case real: TweenMax.from( d, .5, { alpha: 0, delay: 1.5, ease: Quad.easeOut } ); break; case texte: TweenMax.from( d, 2, { alpha: 0, delay: 2, ease: Quad.easeOut } ); break; default : TweenMax.from( d, .4, { alpha: 0, y: -d.height, delay: .2*i, ease: Quad.easeOut } ); break; } } menu.addEventListener( MenuEvent.MENU_CHANGE, onMenuChange ); } private function onMenuChange( event:MenuEvent ):void { trace( event.itemID ); } } }
Je suis désolé d'arriver et de vous bombarder de code, mais c'est vraiment la solution de la dernière chance, je suis perdu depuis 2 semaines sur ce problème.
Partager