Boujour à tous,
Je viens juste de commencer à développer en actionscript 3 et j'ai pour but de créer un menu.
Je suis parti d'une base existante (carroussel de forme ADN):
J'aimerais à ce code ajouter du dynamisme par la création de MovieClip dynamique et un load de l'image chaque option du 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 //Rayon de rotation (en pixels) autour de l'axe y var Rx:Number=120; //Nombre d'icones (pas plus que 10, quoique...) var N:Number=10; //angle de rotation des clips autour de l'axe z var angle:Number=0; //Attachement des icones var Reference:Class; for(var i:Number=0;i<N;i++) { // extraction des références de classe Reference = Class (getDefinitionByName ( "MonClip"+i )); // ajout à la liste d'affichage this.addChild ( DisplayObject (new Reference()) ); //Nom du clip this.getChildAt(i).name='ID'+i; //position initial du ieme clip en y (position helice) //64=taille de l'icone, 64/2=distance du bord au centre de l'icone (icone carré ou cercle) //2*3= marge de 3 pixels en haut et en bas de l'image //la place totale en y prise par les icones = (stage.stageWidth-2*3) //la premiere icone (son centre) se place apres la marge 3+64/2 //d'ou la repartion des icones sur y : this.getChildAt(i).y=(stage.stageHeight-2*3-64/2)*i/N+3+64/2; //Position initial du ieme clip en x this.getChildAt(i).x=Rx*Math.cos(2*Math.PI*i/N)+stage.stageWidth/2; //taille initiale du ieme clip this.getChildAt(i).scaleX=0.6/2*(Math.sin(2*Math.PI*i/N)+ 1)+0.4; this.getChildAt(i).scaleY=this.getChildAt(i).scaleX; //ajout d'un ecouteur sur le ieme clip this.getChildAt(i).addEventListener(MouseEvent.CLICK, OnClick); } //Fonction de click sur les icones function OnClick ( pEvt:MouseEvent ):void { trace("salut"); } //ecouteur enter_frame stage.addEventListener ( Event.ENTER_FRAME, Main ); function Main ( pEvt:Event ):void { //variable temporaire pour la profondeur var z:Number; for(i=0;i<N;i++) { //rotation du i_eme clip sur x this.getChildByName('ID'+i).x=Rx*Math.cos(angle+2*Math.PI*i/N)+stage.stageWidth/2; //mise a jour de la taille du clip (60%->premier plan, 40%->arriere plan) this.getChildByName('ID'+i).scaleX=0.6/2*(Math.sin(angle+2*Math.PI*i/N)+ 1)+0.4; this.getChildByName('ID'+i).scaleY=getChildByName('ID'+i).scaleX; //mise a jour de z (profondeur); z=(N-1)*(Math.sin(angle+2*Math.PI*i/N)+1)/2; this.setChildIndex(this.getChildByName('ID'+i), int(z)); } //rotation commandée par la souris en y //signe moins : rotation inversé //Math.PI/2 = correction d'angle pour que l'icone pointée soit toujours au milieu angle=(2*Math.PI)*(-stage.mouseY+3+64/2)/(stage.stageHeight-(3+64/2))+Math.PI/2; }
Voici mon code :
Je vous avoue que je tourne en rond depuis une journée là-dessus donc j'espère que vous allez pouvoir m'aider. La dernière erreur en date est un problème de conversion MovieClip/Class.
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 //Rayon de rotation (en pixels) autour de l'axe y var Rx:Number=120; //Nombre d'icones (pas plus que 10, quoique...) var N:Number=10; //angle de rotation des clips autour de l'axe z var angle:Number=0; //Attachement des icones var Reference:Class; for(var i:Number=0;i<N;i++) { this["MonClip"+i] = new MovieClip(); var imgMovieClip = this["MonClip"+i] ; var myLoad = new Loader(); myLoad.load(new URLRequest("images"+i+".png")); myLoad.contentLoaderInfo.addEventListener(Event.COMPLETE,handlerLoaderComplete); Reference = Class (this["MonClip"+i]); this.addChild ( DisplayObject (imgMovieClip) ); this.getChildAt(i).name='ID'+i; this.getChildAt(i).y = (stage.stageHeight-2*3-64/2)*i/N+3+64/2; this.getChildAt(i).x = Rx*Math.cos(2*Math.PI*i/N)+stage.stageWidth/2; //taille initiale du ieme clip this.getChildAt(i).scaleX=0.6/2*(Math.sin(2*Math.PI*i/N)+ 1)+0.4; this.getChildAt(i).scaleY = this.getChildAt(i).scaleX; this.getChildAt(i).addEventListener(MouseEvent.CLICK, OnClick); } function handlerLoaderComplete(evt:Event) { //on place le contenu de ton loader dans un movie clip imgMovieClip.addChild(evt.target.content) //on cree le bitmapData de la hauteur/largeur du clip (donc de l'image) var myBitmapData:BitmapData = new BitmapData(imgMovieClip.width,imgMovieClip.height) //on dessine le clip dans le bitmapData myBitmapData.draw(imgMovieClip); //on cree maintenant un bitmap dans lequel on place le bitmapData var myBitmap = new Bitmap(myBitmapData); myBitmap.smoothing = true; } //Fonction de click sur les icones function OnClick ( pEvt:MouseEvent ):void { trace("salut"); } //ecouteur enter_frame stage.addEventListener ( Event.ENTER_FRAME, Main ); function Main ( pEvt:Event ):void { //variable temporaire pour la profondeur var z:Number; for(i=0;i<N;i++) { //rotation du i_eme clip sur x this.getChildByName('ID'+i).x=Rx*Math.cos(angle+2*Math.PI*i/N)+stage.stageWidth/2; //mise a jour de la taille du clip (60%->premier plan, 40%->arriere plan) this.getChildByName('ID'+i).scaleX=0.6/2*(Math.sin(angle+2*Math.PI*i/N)+ 1)+0.4; this.getChildByName('ID'+i).scaleY=getChildByName('ID'+i).scaleX; //mise a jour de z (profondeur); z=(N-1)*(Math.sin(angle+2*Math.PI*i/N)+1)/2; this.setChildIndex(this.getChildByName('ID'+i), int(z)); } angle=(2*Math.PI)*(-stage.mouseY+3+64/2)/(stage.stageHeight-(3+64/2))+Math.PI/2; }
Merci beaucoup de votre aide.
Partager