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 :

Mouvement de mon clip


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Par défaut Mouvement de mon clip
    Bonjours.

    Je suis en train de débuter la réalisation d'un petit jeu type RPG ; et j'en suis encore à la phase "faire bouger le perso dans tout les sens"... .
    Malheureusement, je rencontre un petit bug assez ennuyant... en l'occurrence mon héros ne se déplace que vers le haut et la gauche ( Alors que j'ai codé les autres directions... . ) OO !?

    Voici le code :

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    // VARIABLES
    // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
     
     
    var ToucheGauche:Boolean=false;
    var ToucheHaut:Boolean=false;
    var ToucheDroit:Boolean=false;
    var ToucheBas:Boolean=false;
    var ToucheEspace:Boolean=false;
     
    var vitesse_heros:Number =4;   
    var direction_heros:Number=1;
    var action_heros:Number=1
     
    var liste_action:Array=new Array("1","2","3","4") 
     
     
    // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    // FONCTIONS
    // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
     
    function tester_touche_appuyer(e:KeyboardEvent):void {
    	switch (e.keyCode) {
     
    		case 32:
    		ToucheEspace=true;
    		break;
     
    		case 37:
    		ToucheGauche=true;
    		break;
     
    		case 38:
    		ToucheHaut=true;
    		break;
     
    		case 39:
    		ToucheDroit=true;
    		break;
     
    		case 40:
    		ToucheBas=true;
    		break;
     
    		Default:
    		break;
    	}
    }
     
    function tester_touche_relacher(e:KeyboardEvent):void {
    	switch (e.keyCode) {
     
    		case 32:
    		ToucheEspace=false;
    		break;
     
    		case 37:
    		ToucheGauche=false;
    		break;
     
    		case 38:
    		ToucheHaut=false;
    		break;
     
    		case 39:
    		ToucheDroit=false;
    		break;
     
    		case 40:
    		ToucheBas=false;
    		break;
     
    		Default:
    		break;
    	}
    }
     
    function afficher_heros(x:Number,y:Number) {
    	heros.x+=x;
    	heros.y+=y;
    	if (heros.currentFrame!=(direction_heros+action_heros*4)){
    	heros.gotoAndStop(direction_heros+action_heros*4);
    	}
    }
     
    function deplacer_heros(event:Event) {
    	if (ToucheGauche==true) {
    		action_heros=1;
    		direction_heros=4;
    		afficher_heros(-vitesse_heros,0)
    	} else {
    		if (ToucheDroit==true) {
    			action_heros=1;
    			direction_heros=2;
    			afficher_heros(-vitesse_heros,0)
    		} else {
    			if (ToucheHaut==true) {
    				action_heros=1;
    				direction_heros=1;
    				afficher_heros(0,-vitesse_heros);
    			} else {
    				if (ToucheBas==true) {
    					action_heros=1;
    					direction_heros = 3;
    					afficher_heros(0,-vitesse_heros);
    				} else {
    					if (ToucheEspace==true) {
    						action_heros=2;
    						afficher_heros(0,0);
    					} else {
    						// aucune touche pressé
    						action_heros=0;
    						afficher_heros(0,0)
    					}
    				}
    			}
    		}
    	}
    }
    Au passage, j'ai remarquée que si j'utilise ce code là, sa marche impec' !

    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
    var ToucheGauche:Boolean=false;
    var ToucheHaut:Boolean=false;
    var ToucheDroit:Boolean=false;
    var ToucheBas:Boolean=false;
     
    var vitesse_heros:Number =4;
    // le clip se déplace de 4 pixel en 4 pixel
     
    function tester_touche_appuyer(e:KeyboardEvent):void {
    	switch (e.keyCode) {
     
    		case 37:
    		ToucheGauche=true;
    		break;
     
    		case 38:
    		ToucheHaut=true;
    		break;
     
    		case 39:
    		ToucheDroit=true;
    		break;
     
    		case 40:
    		ToucheBas=true;
    		break;
     
    		Default:
    		break;
    	}
    }
     
    function tester_touche_relacher(e:KeyboardEvent):void {
    	switch (e.keyCode) {
     
    		case 37:
    		ToucheGauche=false;
    		break;
     
    		case 38:
    		ToucheHaut=false;
    		break;
     
    		case 39:
    		ToucheDroit=false;
    		break;
     
    		case 40:
    		ToucheBas=false;
    		break;
     
    		Default:
    		break;
    	}
    }
     
    function deplacer_heros(event:Event) {
    	if (ToucheGauche==true) {
    		heros.x-=vitesse_heros;
    		direction_heros = 4;
    	} else {
    		if (ToucheDroit==true) {
    			heros.x+=vitesse_heros;
    			direction_heros = 2;
    		} else {
    			if (ToucheHaut==true) {
    				heros.y-=vitesse_heros;
    				direction_heros = 1;
    			} else {
    				if (ToucheBas==true) {
    					heros.y+=vitesse_heros;
    					direction_heros = 3;
    				}
    			}
    		}
    	}
    	heros.gotoAndStop(direction_heros);
    }
    Le problème étant que le livre sur lequel je me base ( ActionScript3, développez des jeux en flash, de Henri Blum. ) indique clairement que c'est une mauvaise façon de coder, car gourmande en ressource et potentiellement source d'erreur... .

    Alors ? A votre avis ?

  2. #2
    Membre éclairé
    Inscrit en
    Février 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 70
    Par défaut
    Avec ce que tu nous as montre, ce n'est pas avec 4 boucles que tu vas faire exploser ton processeur.

    Par contre, je le verrais comme cela, pour gagner un place en rapidite (pas besoin de refaire tes boucles if qui s'imbrique)

    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
     
    var direction_heros:int;
     
    var vitesse_heros:int =4;
    // le clip se déplace de 4 pixel en 4 pixel
     
    function tester_touche_appuyer(e:KeyboardEvent):void {
    	gestion_touche(e.keyCode);
    }
     
    function tester_touche_relacher(e:KeyboardEvent):void {
    	gestion_touche(e.keyCode);
    }
     
     
    function gestion_touche(Key:int)
    {
    	switch (Key) 
    	{
    		case 37:
    			direction_heros = 4;
    			heros.x-=vitesse_heros;
    		break;
     
    		case 38:
    			direction_heros = 1;
    			heros.y-=vitesse_heros;
    		break;
     
    		case 39:
    			direction_heros = 2;
    			heros.x+=vitesse_heros;
    		break;
     
    		case 40:
    			direction_heros = 3;
    			heros.y+=vitesse_heros;
    		break;
     
    		Default:
    		break;
    	}
    	heros.gotoAndStop(direction_heros);
    }

  3. #3
    Membre régulier
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Par défaut
    Avec ce que tu nous as montre, ce n'est pas avec 4 boucles que tu vas faire exploser ton processeur.
    Oui, mais comme je suis une apprentie-codeuse bien élevée ; je respecte scrupuleusement ce qu'il y a d'écrit dans les livres :p... .

    Sinon ; merci pour le code, ça fonctionne parfaitement ^^.

Discussions similaires

  1. Donner le focus et gérer mon clip au clavier
    Par hpl76 dans le forum Flash
    Réponses: 0
    Dernier message: 23/09/2011, 11h51
  2. Réponses: 4
    Dernier message: 19/10/2007, 17h34
  3. Réponses: 2
    Dernier message: 08/03/2007, 17h22
  4. [FLASH MX2004] Ou créer mon TextField dans clip ?
    Par Dermochelys dans le forum Flash
    Réponses: 24
    Dernier message: 05/12/2006, 01h01
  5. [FLASH MX PRO] effet mouvement clip
    Par dens63 dans le forum Flash
    Réponses: 5
    Dernier message: 21/04/2004, 10h16

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