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 :

probleme au niveau du drag


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Par défaut probleme au niveau du drag
    Bonjour, je suis étudiante en développement de site web, j'ai donc un cours Flash et je n'arrive pas a faire mon drag correctement, de plus ma poubelle est sencée faire une animation une fois la feuille dragué dessus pour faire disparaitre la fameuse feuille, j'ai tous mes commentaires, voici mon code, de l'aide serait vraiment appréciée, merci!

    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
    //Variables pour la position initiale des feuilles
    var posX:Number;
    var posY:Number;
     
     
    //Empêcher que la poubelle reçoive les événement de souris
    function vide(event:MouseEvent):void {
     
    }
    poubelle_mc.addEventListener(MouseEvent.MOUSE_OVER, vide);
     
    //Fonction descendreFeuille pour le déplacement des feuilles
    function descendreFeuille(event:Event):void {
    	//Animer la descente de la feuille
    	 var feuille:MovieClip = event.currentTarget as MovieClip;
     
     
    	//Analyser si la feuille est tombée sur le sol
    	if (sol_mc.hitTestPoint(feuille.x, feuille.y, true)) {
    		//Si oui détruire le gestionnaire ENTER_FRAME
    		feuille.removeEventListener(Event.ENTER_FRAME, descendreFeuille);
    		// et assigner les gestionnaires MOUSE_DOWN et MOUSE_UP
    		feuille.addEventListener(MouseEvent.MOUSE_DOWN, dragFeuille);
    		feuille.addEventListener(MouseEvent.MOUSE_UP, stopDragFeuille);
    	} else {
    		feuille.y += 3 + Math.random()*7;
    	}
    }
     
    //Attribution des écouteurs d'événement avec une boucle for
    //pour l'animation de la descente des feuilles
    for (var i:int=1; i<8; i++) {
    	var feuille:MovieClip = this["feuille"+ i + "_mc"];
    	feuille.addEventListener(Event.ENTER_FRAME, descendreFeuille);
    }
     
    //Fonction dragFeuille pour glisser les feuilles
    function dragFeuille(event:MouseEvent) {
    var feuille:MovieClip = event.currentTarget as MovieClip;
    	//Retenir la position initiale de la feuille
    	posX = feuille.x;
    	posY = feuille.y;
    	//Draguer la feuille
    	feuille.startDrag(true);
    }
     
    //Fonction stopDragFeuille pour arrêter de glisser les feuilles
    function stopDragFeuille(event:MouseEvent):void {
     
    	//Analyser si la feuille est dans la poubelle
    	if (poubelle_mc.hitTestPoint(feuille.x, feuille.y, true)) {
    	//Si oui, ouvrir la poubelle
    	poubelle_mc.removeEventListener(MouseEvent.MOUSE_OVER, vide);
    	//et faire un fade-out sur la feuille et détruire les gestionnaires
    	}
    	//Sinon, remettre la feuille à sa place initiale
    	else {
    		feuille.x = posX;
    		feuille.y = posY;
    	}
     
    }

  2. #2
    Membre chevronné Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Par défaut
    Je te conseil de mieux organisé ton projet avec des classes si possible , tu pourrais mieux t'y retrouver et faire des choses plus stylé

    Sinon voici le code revu et corrigé avec l'animation :

    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
     
    import fl.transitions.Tween;
    import fl.transitions.easing.*;
     
    var posX:Number;
    var posY:Number;
    var tw:Tween;
     
    function descendreFeuille(event:Event):void {
    	 var feuille:MovieClip = event.currentTarget as MovieClip;
    	if (sol_mc.hitTestPoint(feuille.x, feuille.y, true)) {
    		feuille.removeEventListener(Event.ENTER_FRAME, descendreFeuille);
    		feuille.addEventListener(MouseEvent.MOUSE_DOWN, dragFeuille);
    		feuille.addEventListener(MouseEvent.MOUSE_UP, stopDragFeuille);
    	} else {
    		feuille.y += 3 + Math.random()*7;
    	}
    }
     
    function main(){
    	var feuille:MovieClip;
    	for (var i:int=1; i<8; i++) {
    		feuille = this["feuille"+ i + "_mc"];
    		feuille.addEventListener(Event.ENTER_FRAME, descendreFeuille);
    	}
    }
     
    function dragFeuille(event:MouseEvent) {
    	var feuille:MovieClip = event.currentTarget as MovieClip;
    	posX = feuille.x;
    	posY = feuille.y;
    	feuille.startDrag();
    }
     
    function stopDragFeuille(event:MouseEvent):void {
     
    	var feuille:MovieClip = event.currentTarget as MovieClip;	
    	feuille.stopDrag();
    	if (poubelle_mc.hitTestObject(feuille)) {
    		tw = new Tween(feuille,'alpha',None.easeNone,1,0,0.7,true);
    		feuille.removeEventListener(MouseEvent.MOUSE_DOWN, dragFeuille);
    		feuille.removeEventListener(MouseEvent.MOUSE_UP, stopDragFeuille);
    	}
    	else {
    		feuille.x = posX;
    		feuille.y = posY;
    	}
    }
    main();
    Quelques remarque pour la route :

    -Evite de surcharger ton code de commentaire quand c'est triviale
    -Le code suivant ne sert à rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function vide(event:MouseEvent):void {}
    poubelle_mc.addEventListener(MouseEvent.MOUSE_OVER, vide);
    En effet si la poubelle a pas d'ecouteur sur cette event elle ne declenchera rien donc là c'est contre productif ton code.
    -Oublie pas feuille.stopDrag();
    -Dans main j'ai créer l'objet feuille:MoviClip hors de la boucle sa evite des réallocation de memoire , c'est valable dans tout les langage de programmation.
    -J'ai gardé les var feuille:MovieClip = event.currentTarget as MovieClip; mais c'est pas toujours utile comme ligne.
    -for (var i:int=1; i<8; i++) .. Le 8 prefere lui une constante en debut de programme pour facilement le paramétré. Mieux encore crée les feuilles dynamiquement si possible pour éviter de passer par this["feuille"+ i + "_mc"]; qui est tres laid ^^
    -Ici je comprend pas pourquoi t'utilisais pas poubelle_mc.hitTestObject(feuille)
    plus adapté pour les collisions entre deux displayObject .

    Bon apres avoir tappé sur mon punchingBall en as3 je vais dormir !

    Bonne chance pour demain et j'espere que je t'ai aidé !

Discussions similaires

  1. Débutant probleme au niveau "tutorial java"
    Par carton dans le forum Java ME
    Réponses: 3
    Dernier message: 22/07/2006, 09h54
  2. Probleme au niveau de la connexion de tomcat avec oracle8i
    Par hamska2 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 08/05/2006, 00h53
  3. [JMF] Problème au niveau de RTP
    Par Alienx dans le forum Multimédia
    Réponses: 2
    Dernier message: 05/03/2006, 15h50
  4. [Thread] petit problème au niveau du reveil d'un thread
    Par sagitarium dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 13/01/2006, 11h35
  5. PROBLEME haut niveau BACKUP
    Par Dev_Michael dans le forum Administration
    Réponses: 7
    Dernier message: 10/03/2005, 15h32

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