Bonjour les amis,
J'ai un petit texte sur un site web que j'aimerai voir disparaître lentement, une fois invisible changer de contenu puis réapparaître lentement.
Je précise déjà que je travaille sous Flex builder 4 :/
Pour cela j'ai utilisé mx.effects.Fade ainsi que mx.effects.sequence.
Pour faire disparaître le texte et le faire réapparaître c'était suffisant. Maintenant pour changer le texte une fois l'ancien invisible... J'ai pas trouvé grand chose :/
Pour tout dire, j'ai trouvé qu'une seule façon, peut-être que je me suis prit la tête pour rien, mais j'ai pas trouvé mieux ^^
J'ai crée mon propre effet, qui est sensé changer le texte, ceci pour l'ajouter a la séquence et ainsi avoir les trois effets dans l'ordre.
Techniquement ca marche. C'est a dire que si je teste ce code:
Ca marche niquel, le texte est bien changé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 changeTextValueEffect.text = "TEST"; changeTextValueEffect.target = _textAChanger; sequenceEffect.addChild(changeTextValueEffect); sequenceEffect.play();
Par contre si je teste:
Le texte disparaît, change (j'ai vérifié à la main) mais ne réapparaît pas! Et pour ce que j'en sais, une fois que sequence arrive au moment de traiter mon changement de texte, il l'éxécute puis s'arrête la, impossible de traiter d'autres effets par la suite.
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 fadeInEffect.alphaTo = 0; fadeInEffect.duration = 1000; fadeInEffect.target = _texteAChanger; changeTextValueEffect.text = "TEST"; changeTextValueEffect.target = _texteAChanger; fadeOutEffect.alphaTo = 1; fadeOutEffect.duration = 1000; fadeOutEffect.target = _texteAChanger; sequenceEffect.addChild(fadeInEffect); sequenceEffect.addChild(changeTextValueEffect); sequenceEffect.addChild(fadeOutEffect); sequenceEffect.play();
J'imagine donc qu'il doit y avoir un problème dans mon effet personnalisé mais je n'arrive pas à déterminer lequel...
Une aide serait plus que bienvenue
ChangeTextValue.as:
ChangeTextValueInstance.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 package EffetsPerso { import mx.effects.Effect; import mx.effects.IEffectInstance; public class ChangeTextValue extends Effect { private var _text:String = ""; public function set text(value:String):void { _text = value; } public function get text():String { return _text; } // le constructeur doit appeler le super constructeur // et doit aussi assigner une référence à la classe d'instance (instanceClass) public function ChangeTextValue(newTarget:Object = null) { super (newTarget); instanceClass = ChangeTextValueInstance; } override public function getAffectedProperties():Array { return []; } override protected function initInstance(instance:IEffectInstance):void { super.initInstance(instance); // puisque toutes les instance sont de type IEffectInstance, // vous devez faire un cast en FlagInstance // pour fixer la propriété _text ChangeTextValueInstance(instance).text = _text; } } }
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 package EffetsPerso { import mx.effects.EffectInstance; import flash.display.Shape; public class ChangeTextValueInstance extends EffectInstance { private var _text:String; public function set text(value:String):void{ _text = value; } public function get text():String{ return _text; } // le constructeur doit accepter un paramètre // et le passer au super constructeur public function ChangeTextValueInstance(newTarget:Object){ super(newTarget); } // tous les effets doivent override la méthode play() override public function play():void{ // appel de la méthode super.play() super.play(); target.content = _text; } } }
Partager