Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
719 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Probleme avec hitTest en ActionScript 2

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme avec hitTest en ActionScript 2

n°1621936
cedricgab
Posté le 11-10-2007 à 01:26:03  profilanswer
 

:whistle: Salut,
voila j'ai un petit problème, je dois réaliser un casse brique, pour l'instant juste une balle qui rebondit contre des parois.
http://the-wallofame.com/david-cedric-portefolio/img.jpg
On m'oblige à utiliser un hitTest   :pt1cable: pour détecter la collision de la balle avec les parois, le problème c'est que par moments la balle se retrouve coincée contre une des parois au lieu de rebondir normalement, c'est à dire qu'elle zigzague contre celle-ci avant de ressortir (du jeu ou retourne dans le rectangle). :cry:  
Voila:
http://the-wallofame.com/david-cedric-portefolio/prob.jpg
J'ai fait un trace() pour relever les angles lors du probleme et ils sont identiques, en gros ça veux dire que la balle se trouve emprisonnée dans le mur (ou la raquette quand on en met une).
 
Voila mon code:
 
   //----------------------------------champs-------------------------
    //initialisation des variables
    var hauteur:Number = Stage.height;
    var largeur:Number = Stage.width;
 
    //on positionne le cercle au centre de la scene
    cercle._x = largeur/2;
    cercle._y = hauteur/2;
 
    //varibales globales qui modélisent la vitesse et l'orientation de la balle
    _global.vitesse = 24;
    _global.angle = Math.PI/4;
 
    //--------------------------------fonction pour déplacer la bille------------------------------------------
    function deplacerCercle() {
       
        //collision avec barre de gauche  
        if (_root["murGauche"].hitTest(_root["cercle"])) {
            _global.angle=Math.PI-angle;
        }
        //collision avec barre du haut
        if (_root["murHaut"].hitTest(_root["cercle"])) {
            _global.angle=2*Math.PI-angle;
        }
        //collision avec barre de droite  
        if (_root["murDroite"].hitTest(_root["cercle"])) {
            _global.angle=Math.PI-angle;
        }
        //collision avec barre du bas  
        if (_root["murBas"].hitTest(_root["cercle"])) {
            _global.angle=2*Math.PI-angle;
        }
 
        //calcul de la destination de la bille
        var deltaX:Number = Math.cos(angle)*vitesse;
        var deltaY:Number = Math.sin(angle)*vitesse;
       
        //déplacement de la bille
        cercle._x += deltaX;
        cercle._y -= deltaY;
    }
 
 
    //-----------------------fonction principale, lancement de la fonction init()-------------------------
    onEnterFrame = function () {
        deplacerCercle();
    };

 
 
Si quelqu'un peux m'aider ça serais super sympa...  :D

mood
Publicité
Posté le 11-10-2007 à 01:26:03  profilanswer
 

n°1621939
Zedlefou
In cabbage we trust !
Posté le 11-10-2007 à 03:17:50  profilanswer
 

C'est pas mal ton truc des angles mais peut être un peu compliqué.
Moi je fais comme ça :
Je donne 2 propriétés de sens a mon objet
cercle.sensX = 1;
cercle.sensY = -1;
 
que je multiplie à la vitesse
        cercle._x += vitesse*sensX;
        cercle._y += vitesse*sensY;
 
Et ensuite je met dans chaque hitTest()  
  //collision avec barre de gauche  
        if (_root["murGauche"].hitTest(_root["cercle"])) {
            cercle.sensX = 1;
        }  
        //collision avec barre du haut
        if (_root["murHaut"].hitTest(_root["cercle"])) {
             cercle.sensY = 1;
        }
 
etc ...


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
n°1622016
antika
Posté le 11-10-2007 à 10:01:07  profilanswer
 

C'est dû au hitTest. Il ne faut pas utiliser de hitTest. Tu dois faire ton test sur les coordonnées que tu calcules à la ligne <//déplacement de la bille>, et ne PAS les appliquer si le test est positif.
 
Sinon, tu lances ton test trop tard : la bille a déjà dépassé le bord, elle est coincée, puisque le test donnera toujours un résultat positif/négatif/positif/négatif/etc. D'où l'effet d'oscillation.
 
Ta méthode peut sembler astucieuse mais normalement ça ne se fait pas comme ça (angles), mais plutôt avec des vecteurs, beaucoup plus rapides au runtime que Math.sin() et Math.cos(). Les opérations mathématiques induites lorsque tu travailles avec des vecteurs sont beaucoup plus rapides (tu multiplies juste le vecteur par -1 et x ou en y quand il rencontre une paroi).
 
(simple remarque : ce n'est pas de l'as2, édite ton titre, en as2 on fait des classes)


Message édité par antika le 11-10-2007 à 10:02:51

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Probleme avec hitTest en ActionScript 2

 

Sujets relatifs
[Résolu]Probleme d'enregistrement - envoi de formulaire[Résolu] Probleme d'enregistrement lors d'un envoi de formulaire
Problème Incrémentationproblème avec un moteur de recherche
Problème activeperl sous vistaProblème avec un static
Probleme deployement sur SUN JAVA SYSTEM APPLICATION SERVER 9.1[XSL] problème avec <xsl:attribute name="href">
probleme d'encodage a l'import d'un .sql[actionscript] probleme hittest
Plus de sujets relatifs à : Probleme avec hitTest en ActionScript 2


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR