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 :

Problèmes de gestion de collisions en AS3 [CS5]


Sujet :

ActionScript 3

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Problèmes de gestion de collisions en AS3
    Hello,

    Premièrement, je vous présente d'avance mes excuses si cette question a déjà été posée, je dois avouer que je suis un peu au bout du rouleau. Je suis en projet as3 et mon prof a décidément de nous laisser seuls après seulement 2 cours.

    Mon problème est le suivant : Une boucle appelle en continue des boulets pour provoquer une chute de neige. J'ai un élément présent directement sur la scène que je peux contrôler grâce aux flèches du clavier.

    J'aimerais créer une gestion de collision entre les éléments qui chutent et le personnage. J'ai pensé à faire un tableau dans le quel je mettrais chaque élément de la boucle, puis une utiliser le fonctionnement du tableau pour permettre à une fonction d'en tester chaque composant afin de voir si oui ou non il y a collision. Simplement, je n'arrive pas à mettre tout cela en code.

    Si jamais l'un de vous avait le temps de m'aider rapidement, ça me sauverait vraiment la mise.
    Si non, merci quand même d'avoir lu.

    Eshra

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 40
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Pour tester des collisions simples en AS3 il existe la méthode hitTestObject(obj: DisplayObject):Boolean.
    Donc pour ton problème, tu parcours ton tableau contenant les boulets et pour chaque boulet tu testes la collision avec l'élément présent sur ta scène.
    Un petit exemple non-fonctionnel mais qui montre le principe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for each(var boulet:DisplayObject in monTableau) // Pour chaque boulet
    {
        if(boulet.hitTestObject(monElement) == true) // S'il y a collision avec l'élément
        {
           // On traite la collision
        }
    }

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour la réponse
    Dernières questions probablement stupides, mais la boucle pour les boulets je la fait directement dans un tableau ? Et le bout de code que tu m'as montré, je dois le placer où ?

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 40
    Points : 68
    Points
    68
    Par défaut
    Il faut au préalable que tu stockes tous tes boulets dans un tableau.

    Le code que peut être placé dans une fonction appelée lors de l'événement ENTER_FRAME par exemple afin de tester la collision à chaque frame.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Justement, j'ai saisi la logique, je ne sais simplement pas comment fonctionne le code. C'est bien tout le problème de ce projet initié trop rapidement par mon professeur.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 40
    Points : 68
    Points
    68
    Par défaut
    Peux-tu montrer le code que tu as actuellement ?

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    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
    import flash.events.Event;
     
    //Génération continue de boulets
    for ( var i:int = 0 ; i < 30 ; i++ ) {
     
    var hb:Hb = new Hb();
    this.addChild(hb);
    hb.y = -100;
    hb.x = Math.random() * stage.stageWidth;
    hb.mvtY = 1 + Math.random()*7;
    hb.addEventListener(Event.ENTER_FRAME, onHbFrame);
    if ( hb.x == personnage.x + 10 && hb.x == personnage.x - 10 && hb.y == personnage.y + 10 && hb.y == personnage.y - 10 ) {
    		removeChild(personnage);
    }
    }
     
    function onHbFrame(e:Event) {
    	e.currentTarget.y += e.currentTarget.mvtY;
    		if ( e.currentTarget.y > stage.stageHeight ) {
    			e.currentTarget.y = -100;
    	}
     
    }
    hb étant pour Hamburgers ( contexte de l'exercice ).
    C'est ma partie de code qui concerne la boucle. ( l'autre élément lui est déjà sur la scène et a pour nom d'occurence " perso ". Je sais pas si ça change quelque chose qu'il soit déjà sur la scène pour gérer la collision )

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 40
    Points : 68
    Points
    68
    Par défaut
    Vu ton code tu n'as pas besoin de faire une boucle pour tester la collision. Tu peux utiliser la fonction onHbFrame à la place puisqu'elle est appelée à chaque frame pour chaque hamburger.

    La fonction onHbFrame devrait ressembler à peu près à ça si on rajoute le test de collisions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function onHbFrame(e:Event) {
    	e.currentTarget.y += e.currentTarget.mvtY;
    		if ( e.currentTarget.y > stage.stageHeight ) {
    			e.currentTarget.y = -100;
    	}
            // Test de la collision
            var perso:DisplayObject = container.getChildByName("perso"); 
            if(e.currentTarget.hitTestObject(perso))
            {
                // Collision !
            }
    }

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    " Accès à la propriété non définie : container "... Je n'ai jamais rien mis dans un container, ça vient de ça ?

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 40
    Points : 68
    Points
    68
    Par défaut
    Euh... là je ne peux pas deviner. Cette erreur n'a pas grand-chose à voir avec le code que tu as montré. Flash t'indique la ligne de l'erreur normalement.

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    C'est bon, j'ai fini par régler le soucis et ça marche nickel. Merci beaucoup pour ton aide.

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

Discussions similaires

  1. Problème de gestion de collision [encore]
    Par _SamSoft_ dans le forum SDL
    Réponses: 3
    Dernier message: 27/02/2008, 12h28
  2. Problème de gestion de collision
    Par _SamSoft_ dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 26/02/2008, 15h24
  3. Gros problème de gestion de collisions [C et SDL]
    Par _SamSoft_ dans le forum Développement 2D, 3D et Jeux
    Réponses: 13
    Dernier message: 06/12/2007, 13h09
  4. Problème gestion de collisions
    Par kaien dans le forum Physique
    Réponses: 6
    Dernier message: 31/01/2007, 15h31
  5. [TFrame] Problème de gestion du OnMouseDown avec une Frame
    Par xherault dans le forum Composants VCL
    Réponses: 5
    Dernier message: 23/05/2003, 15h35

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