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

Flash Discussion :

[FLASH 8] Problème de hitTest pour jeux de plate-forme


Sujet :

Flash

  1. #1
    Membre actif Avatar de jbidou88
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 493
    Points : 242
    Points
    242
    Par défaut [FLASH 8] Problème de hitTest pour jeux de plate-forme
    Bonjour, je suis en train de réaliser un petit jeu de plate-forme et j'ai quelque problème avec mes hitTest pour les collisions. Quelqu'un a-t-il une autre solution que d'utiliser les hitTest ou non ? Je mets ma source à disposition si quelqu'un veux jeter un coup d'oeil.

    Merci de votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur

    Avatar de The_Pretender
    Homme Profil pro
    Formateur Développement / Programmation
    Inscrit en
    Juin 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Formateur Développement / Programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2004
    Messages : 739
    Points : 4 673
    Points
    4 673
    Par défaut
    Bonjour,

    Tu peux utiliser les coordonnées et la taille de tes objets pour savoir si ils sont en collision. Mais ca va faire beaucoup de calcul.
    Je ne pense pas que ce soit la meilleure solution.
    Réclamez La Méthode Développement Facile pour Créer Rapidement des Applications Performantes sur Mobiles et Ordinateurs : Développement Facile

    Développez des Applications Web Performantes avec la Formation Vidéos Developpez : Programmation Facile

    Découvrez : Tutoriels, ressources AS2 et AS3

  3. #3
    Membre actif Avatar de jbidou88
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 493
    Points : 242
    Points
    242
    Par défaut
    Mon problème est que les objets et mon personnage ce superpose un petit peu certaine fois.

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    moi personnelement j aurais essayer de calculer la prochaine position d un personnage...
    par exemple imaginons le personage en train de tomber sur une plateforme
    et bien il vaut mieu calculer sa position suivante avant de la déplacer et détecter sil est dans l interval de la plateforme (_x) et s il actuellement il est audessus (_y) et a la prochaine position... s il est en dessous (_y) et toujours dans l interval de la plateforme...
    si toutes ces conditions sont respectées alors la prochaine position sera SUR la plateforme...

    Petit conseil, j ai commencé à coder un jeu de plateforme...et franchement le hittest c est vraiment pas indiqué

  5. #5
    Membre actif Avatar de jbidou88
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 493
    Points : 242
    Points
    242
    Par défaut
    Tu me conseillerais quoi comme méthode à la place des hitTest ???

  6. #6
    Rédacteur

    Avatar de The_Pretender
    Homme Profil pro
    Formateur Développement / Programmation
    Inscrit en
    Juin 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Formateur Développement / Programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2004
    Messages : 739
    Points : 4 673
    Points
    4 673
    Par défaut
    Citation Envoyé par The_Pretender Voir le message
    Bonjour,

    Tu peux utiliser les coordonnées et la taille de tes objets pour savoir si ils sont en collision. Mais ca va faire beaucoup de calcul.
    Je ne pense pas que ce soit la meilleure solution.
    Citation Envoyé par luta Voir le message
    moi personnelement j aurais essayer de calculer la prochaine position d un personnage...
    par exemple imaginons le personage en train de tomber sur une plateforme
    et bien il vaut mieu calculer sa position suivante avant de la déplacer et détecter sil est dans l interval de la plateforme (_x) et s il actuellement il est audessus (_y) et a la prochaine position... s il est en dessous (_y) et toujours dans l interval de la plateforme...
    si toutes ces conditions sont respectées alors la prochaine position sera SUR la plateforme...

    Petit conseil, j ai commencé à coder un jeu de plateforme...et franchement le hittest c est vraiment pas indiqué
    C'est aussi ce que je lui préconisais en quelque sorte.
    Il faut développé un petit moteur qui à partir de la position et de la taille de l'objet, il détermine si il y a collision ou non.
    Réclamez La Méthode Développement Facile pour Créer Rapidement des Applications Performantes sur Mobiles et Ordinateurs : Développement Facile

    Développez des Applications Web Performantes avec la Formation Vidéos Developpez : Programmation Facile

    Découvrez : Tutoriels, ressources AS2 et AS3

  7. #7
    Membre actif Avatar de jbidou88
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 493
    Points : 242
    Points
    242
    Par défaut
    Ökay je vais essayé la méthode qui consiste a calculer la prochaine valeur du perso.

  8. #8
    Membre actif Avatar de jbidou88
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 493
    Points : 242
    Points
    242
    Par défaut
    Cette solution fontionne bien, voila ce que ça donne :

    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
    var v_deplacement = 5;
     
    function droite () {
     
    	if(!sol.hitTest(perso._x+(perso._width/2)+v_deplacement,perso._y,true)) {
    		if(!sol.hitTest(perso._x+(perso._width/2)+v_deplacement,perso._y-(perso._height/2),true)) {
    			if(!sol.hitTest(perso._x+(perso._width/2)+v_deplacement,perso._y+(perso._height/2),true)) {
    				perso._x += v_deplacement;	
    			}
    		}
    	} else {
    		if(!sol.hitTest(perso._x+(perso._width/2)+1,perso._y-(perso._height/2),true)) {
    			if(!sol.hitTest(perso._x+(perso._width/2)+1,perso._y+(perso._height/2),true)) {
    				if(!sol.hitTest(perso._x+(perso._width/2)+1,perso._y,true)) {
    					perso._x += 1;
    				}
    			}
    		}
    	}
    }
     
    function gauche () {
     
    	if(!sol.hitTest(perso._x-(perso._width/2)-v_deplacement,perso._y,true)) {
    		if(!sol.hitTest(perso._x-(perso._width/2)-v_deplacement,perso._y-(perso._height/2),true)) {
    			if(!sol.hitTest(perso._x-(perso._width/2)-v_deplacement,perso._y+(perso._height/2),true)) {
    				perso._x -= v_deplacement;
    			}
    		}
    	} else {
    		if(!sol.hitTest(perso._x-(perso._width/2)-1,perso._y-(perso._height/2),true)) {
    			if(!sol.hitTest(perso._x-(perso._width/2)-1,perso._y+(perso._height/2),true)) {
    				if(!sol.hitTest(perso._x-(perso._width/2)-1,perso._y,true)) {
    					perso._x -= 1;
    				}
    			}
    	 	}
    	}
    }
     
    function saut () {
    	if(!sol.hitTest(perso._x,perso._y-(perso._height/2)-v_deplacement,true)) {
    		if(!sol.hitTest(perso._x-(perso._width/2),perso._y-(perso._height/2)-v_deplacement,true)) {
    			if(!sol.hitTest(perso._x+(perso._width/2),perso._y-(perso._height/2)-v_deplacement,true)) {
    				perso._y -= v_deplacement;
    			}
    		}
    	} else {
    		if(!sol.hitTest(perso._x,perso._y-(perso._height/2)-1,true)) {
    			if(!sol.hitTest(perso._x-(perso._width/2),perso._y-(perso._height/2)-1,true)) {
    				if(!sol.hitTest(perso._x+(perso._width/2),perso._y-(perso._height/2)-1,true)) {
    					perso._y -= 1;
    				}
    			}
    		}
    	}
    }
     
    function bas () {
    	if(!sol.hitTest(perso._x,perso._y+(perso._height/2)+v_deplacement,true)) {
    		if(!sol.hitTest(perso._x-(perso._width/2),perso._y+(perso._height/2)+v_deplacement,true)) {
    			if(!sol.hitTest(perso._x+(perso._width/2),perso._y+(perso._height/2)+v_deplacement,true)) {
    				perso._y += v_deplacement;
    			}
    		}
    	} else {
    		if(!sol.hitTest(perso._x,perso._y+(perso._height/2)+1,true)) {
    			if(!sol.hitTest(perso._x-(perso._width/2),perso._y+(perso._height/2)+1,true)) {
    				if(!sol.hitTest(perso._x+(perso._width/2),perso._y+(perso._height/2)+1,true)) {
    					perso._y += 1;
    				}
    			}
    		}
    	}
    }

  9. #9
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    Super!
    Personnelement je n aurais meme pas utilisé le hitTest...
    en effet imagine que ton test gauche() fasse que perso._x+(perso._width/2)+v_deplacement soit supérieur à la distance max couverte par l objet sol...alors ton personnage 'traversera' le mur...

    Donc j aurai juste fait une comparaison de valeurs _x avant et _x apres.

    Maintenant si ca marche comme ça.... bah voila

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un seul site pour toutes les plates-formes
    Par vermine dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 23/08/2018, 12h37
  2. Réponses: 2
    Dernier message: 30/09/2011, 11h10
  3. Quels sont les outils nécessaires pour créer une plate-forme ?
    Par overon dans le forum Langages de programmation
    Réponses: 12
    Dernier message: 27/03/2007, 19h10

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