Bonjour à tous,
Après de longues année à utiliser l'AS2, j'ai décidé de passer à l'AS3 mais pas sans mal. Voilà mon problème:
J'ai deux clips:
base: occurrence de Base qui utilise la classe Base.as
carre_mc: occurrence de Carre qui utilise la classe Carre.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 package { import flash.display.MovieClip; import flash.events.MouseEvent; import flash.geom.Point; import flash.events.Event; public class Base extends MovieClip { //*** Attributs *** private var _cursposx:Number; //mémorisation curseur x private var _cursposy:Number; //mémorisation curseur y private var _vitesse:Number; //vitesse globale private var _vitessex:Number; //vitesse à appliquer en x private var _vitessey:Number; //vitesse à appliquer en y private var _angleRadian:Number; // angle en radian private var _angleDegree:Number; // angle en degree private var _mouseisdown:Boolean; // si le clique est enfoncé //*** Constructeur *** public function Base() { _vitesse = 5; addEventListener(Event.ENTER_FRAME, enterFrame); addEventListener ( MouseEvent.MOUSE_DOWN, update ); addEventListener ( MouseEvent.MOUSE_UP, update2 ); } //*** Accesseurs/Mutateurs *** //*** Méthodes *** public function update(event:MouseEvent):void{ _mouseisdown = true; _cursposx = stage.mouseX; _cursposy = stage.mouseY; _angleRadian = Math.atan2(_cursposy - 360,_cursposx - 600); _angleDegree = _angleRadian * 180 / Math.PI; _vitessex = Math.cos(_angleRadian) * _vitesse; _vitessey = Math.sin(_angleRadian) * _vitesse; root.carre_mc.protation(_angleDegree); } public function update2(event:MouseEvent):void{ _mouseisdown = false; } public function update3():void{ _mouseisdown = true; _cursposx = stage.mouseX; _cursposy = stage.mouseY; _angleRadian = Math.atan2(_cursposy - 360,_cursposx - 600); _angleDegree = _angleRadian * 180 / Math.PI; _vitessex = Math.cos(_angleRadian) * _vitesse; _vitessey = Math.sin(_angleRadian) * _vitesse; } public function enterFrame(e:Event):void{ if(_mouseisdown == true){update3()} if(_cursposx < 590){x -=_vitessex;_cursposx -=_vitessex;} if(_cursposx > 610){x -=_vitessex;_cursposx -=_vitessex;} if(_cursposy < 350){y -=_vitessey;_cursposy -=_vitessey;} if(_cursposy > 370){y -=_vitessey;_cursposy -=_vitessey;} trace(_mouseisdown); } }//fin classe }//fin package
les deux clips sont placés dynamiquement sur la scène principale dans l'image1 du calque1:
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 package { import flash.display.MovieClip; public class Carre extends MovieClip { //*** Attributs *** private var _rotation:int; //*** Constructeur *** public function Carre() { _rotation = 90; } //*** Accesseurs/Mutateurs *** public function get protation():Number{ return _rotation; } public function set protation(nombre:Number):void{ _rotation = Math.floor(nombre); this.rotation = _rotation; } }//fin classe }//fin package
Je voudrais que lorsque je clique sur base, carre_mc pivote suivant _angleDegree. J'ai donc créé le mutateur "set protation" dans la classe Carre.as.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 var base:Base = new Base(); base.x = 600; base.y = 360; addChild(base); var carre_mc:Carre = new Carre(); carre_mc.x = 600; carre_mc.y = 360; addChildAt(carre_mc,1);
Dans la classe Base.as sur l'événement CLICK je veux appeler ce mutateur mais je n'y parvient pas.
J'ai essayé:
J'ai toujours l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 carre_mc.protation(_angleDegree); root.carre_mc.protation(_angleDegree); stage.carre_mc.protation(_angleDegree); MovieClip(carre_mc).protation(_angleDegree);
1119: Accès à la propriété carre_mc peut-être non définie, via la référence de type static flash.displayisplayObject.
Je ne comprend pas car cette erreur car j'ai bien précisé "public" devant mon mutateur.
Partager