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 :

Rond tronqué lors du déplacement


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Par défaut Rond tronqué lors du déplacement
    Bonjour,

    Je me met à l'as3 et je rencontre déjà un soucis des le début. J'ai fait un rond qui rebondit sur les rebords de l'écran. Mais lors de son déplacement, le rond est tronqué de la valeur de déplacement que je lui ai donné. Vous pouvez visualiser le soucis à l'adresse suivante (faites pas attention à l'adresse ^^ => http://gros-caca.fr)

    Le code est le suivant :

    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
     
    import flash.display.Shape;
    import flash.events.Event;
     
    stage.frameRate=60;
     
    var balle:MovieClip = new MovieClip();
    var modifX:Number = 5;
    var modifY:Number = 5;
     
    balle.graphics.lineStyle(4, 0x000000);
    balle.graphics.beginFill(0xFF0000);
    balle.graphics.drawCircle(20, 20, 20);
    balle.x = 100;
    balle.y = 100;
     
    this.addChild(balle);
     
    this.addEventListener(Event.ENTER_FRAME, bouge);
     
    function bouge(pEvt:Event):void{
    	if(balle.x > stage.stageWidth - 40 || balle.x < 1) modifX *= -1;
    	if(balle.y > stage.stageHeight - 40 || balle.y < 1) modifY *= -1;
     
    	balle.x += modifX;
    	balle.y += modifY;
    }
    Si je baisse le framerate le soucis n'est plus présent, mais ce n'est plus aussi fluide. Comment puis je corriger cela ?

    Par avance, merci.

    Threonine

  2. #2
    Membre actif
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Par défaut
    Avec un algo aussi basique t'aura pas le bons résultat.

    Si tu veux que ta balle rebondisse de manière plus réaliste il va falloir se creuser les méninge un peu plus.

    Premièrement si tu utilise le centre de ta balle, il faut que le rectangle de collision aie une marge de la taille du rayon de la balle. Donc on teste entre si x<rayon pour la gauche et si x>(largeur-rayon) pour la droite.

    Ensuite il faut un peut d'imagination. Imagine la balle se déplace au moment T elle arrive proche de mur, à T+1 elle devrait être de l'autre coté du mur (imagine) mais comme le mur est là il agit comme un miroir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
             |
        x'   |   x <- position de la balle à t+1 si y'avait pas de mur
          \  |  /
           \ | /
            \|/
             |
            /|
           / |
          /  |
         /   |
        /    |
      B      |
             mur
    B balle à T
    x position théorique de la balle
    x'position où on doit placer la balle

    il faut donc que tu inverse la position de la balle.

    si la balle a traversé le mur alors :
    position de la balle = position du mur + distance entre la balle et le mur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // calcul de la positon théorique
    balleX+=vitesseX;
     
    if(balleX<rayon){
         balleX=rayon+(rayon-balleX);
         vitesseX=-vitesseX;
    }
    rayon-balleX c'est la distance qu'a parcouru la balle à travers le mur à droite.
    rayon c'est le rayon de la balle mais c'est aussi la position du mur

    Je suis méchant je t'ai fait le schéma dans un sens et le code pour l'autre coté.

    Tu peux extrapoler pour tout les cotés de la boite et puis rajouter un petit facteur de rebond genre 0.9
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         balleX=rayon+(rayon-balleX)*rebond;
         vitesseX=-vitesseX*rebond;

Discussions similaires

  1. [Upload] Erreur lors du déplacement de l'image
    Par javaboy dans le forum Langage
    Réponses: 4
    Dernier message: 16/10/2007, 14h56
  2. résultat tronqué lors d'un spool
    Par petit arbre dans le forum SQL
    Réponses: 4
    Dernier message: 26/06/2007, 12h23
  3. Réponses: 10
    Dernier message: 02/05/2007, 20h32
  4. Réponses: 33
    Dernier message: 15/10/2004, 16h19
  5. [TForm] Problème lors du déplacement d'une fenêtre sans barre de titre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/10/2004, 17h10

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