IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Effet personnalisé dans une séquence


Sujet :

ActionScript 3

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Par défaut Effet personnalisé dans une séquence
    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:

    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();
    Ca marche niquel, le texte est bien changé.
    Par contre si je teste:

    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();
    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.
    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:
    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;
    		}
    	} 
    }
    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
     
    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;
    		}
    	}
     
    }

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Par défaut
    Moi j'utilise tween lite, ou tween max, c'est simple et pratique. Pour l'effet que tu souhaites encore plus

    Faut aller voir du cote de greensock pour obtenir les classes

    et aprés, en 2 lignes c'est fait : ptit exemple ( mc aura un alpha de 1, 1 seconde aprés l'execution, on peut meme rajouter des fonctions a la fin comme dans l'exemple
    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
     
    import com.greensock.*;
     
    mc.alpha = 0;
    mc_suivant.alpha = 0;
     
    start()
     
    function start()
    {
    TweenMax.to(mc, 1, {alpha:1, onComplete:falpha2});
    }
     
    function falpha2()
    {
    TweenMax.to(mc_suivant, 1, {alpha:1});
    }

Discussions similaires

  1. Changement de luminance dans une séquence d'images
    Par hanane78 dans le forum Images
    Réponses: 7
    Dernier message: 18/10/2007, 22h37
  2. effet loupe dans une jTable
    Par nutix2003 dans le forum Composants
    Réponses: 3
    Dernier message: 05/04/2007, 16h33
  3. Reconnaître une position dans une séquence d'images
    Par echataig dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 23/01/2006, 17h44
  4. [VB.NET] Contrôle personnalisé dans une dll personnalisée
    Par c3b12 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/10/2004, 07h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo