Intégration Verlet

Résolu
tankerpat Messages postés 4 Date d'inscription vendredi 27 septembre 2013 Statut Membre Dernière intervention 25 septembre 2015 - 27 sept. 2013 à 02:10
tankerpat Messages postés 4 Date d'inscription vendredi 27 septembre 2013 Statut Membre Dernière intervention 25 septembre 2015 - 29 sept. 2013 à 17:08
Bonjour,
J'ai tenté de mettre en place une gestion de collision et d'y intégrer la méthode de Verlet pour la physique mais elle ne fonctionne que dans un sens, j'ai tenté plusieurs modifications et recherches mais sans succés.
J'ai d'abord cru à un problème avec la position de mon sprite, alors j'ai fait quelque test à nouveau, je débute seulement et j'utilise XNA.
Dans un premeir temps pouvez vous m'expliquer pourquoi cette fonction de déplacement fonctionne
KeyboardState newState = Keyboard.GetState();
            entity.IntégrationPhysique();
            float fx = 0;
            float fy = 0;

            
            
            if (newState.IsKeyDown(Keys.Left))
            {
                //entity.position.X -= Constantes.PLAYER_SPEED;
                fx -= Constantes.PLAYER_SPEED;
               
            }
            if (newState.IsKeyDown(Keys.Right))
            {
                fx += Constantes.PLAYER_SPEED;
                //entity.position.X += Constantes.PLAYER_SPEED;
              
            }
            if (newState.IsKeyDown(Keys.Down))
            {
                fy += Constantes.PLAYER_SPEED;
                //entity.position.Y += Constantes.PLAYER_SPEED;
                
            }
            if (newState.IsKeyDown(Keys.Up) )
            {
                fy -= Constantes.PLAYER_SPEED + entity.Gravity;
               // entity.position.Y -= Constantes.PLAYER_SPEED;//+ entity.Gravity
            }    

    
            if (newState.IsKeyDown(Keys.R))
            {
                entity.position.Y =50;
                entity.position.X = 150;
                
            }
            
            var vx = entity.position.X - entity.oldposition.X;
            var vy = entity.position.Y - entity.oldposition.Y;
            var newx = Math.Min(Constantes.MAX_SPEED, Math.Max(-Constantes.MAX_SPEED, vx + fx));
            var newy = Math.Min(Constantes.MAX_SPEED, Math.Max(-Constantes.MAX_SPEED, vy + fy));
            entity.position.X = entity.oldposition.X + newx;
            entity.position.Y = entity.oldposition.Y + newy;
            
            //entity.IntégrationPhysique();
            entity.CollisionVsLimites();


mais que celle-ci ne fonctionne plus

KeyboardState newState = Keyboard.GetState();
            entity.IntégrationPhysique();
            float fx = 0;
            float fy = 0;

             
            
            if (newState.IsKeyDown(Keys.Left))
            {
                //entity.position.X -= Constantes.PLAYER_SPEED;
                fx -= Constantes.PLAYER_SPEED;
               
            }
            if (newState.IsKeyDown(Keys.Right))
            {
                fx += Constantes.PLAYER_SPEED;
                //entity.position.X += Constantes.PLAYER_SPEED;
              
            }
            if (newState.IsKeyDown(Keys.Down))
            {
                fy += Constantes.PLAYER_SPEED;
                //entity.position.Y += Constantes.PLAYER_SPEED;
                
            }
            if (newState.IsKeyDown(Keys.Up) )
            {
                fy -= Constantes.PLAYER_SPEED + entity.Gravity;
               // entity.position.Y -= Constantes.PLAYER_SPEED;//+ entity.Gravity
            }    

    
            if (newState.IsKeyDown(Keys.R))
            {
                entity.position.Y =50;
                entity.position.X = 150;
                
            }
            
            entity.p = entity.position;
            entity.o = entity.oldposition;
            var vx = entity.p.X - entity.o.X;
            var vy = entity.p.Y - entity.o.Y;
            
            var newx = Math.Min(Constantes.MAX_SPEED, Math.Max(-Constantes.MAX_SPEED, vx + fx));
            var newy = Math.Min(Constantes.MAX_SPEED, Math.Max(-Constantes.MAX_SPEED, vy + fy));
            
            entity.p.X = entity.o.X + newx;
            entity.p.Y = entity.o.Y + newy;
            //entity.IntégrationPhysique();
            entity.CollisionVsLimites();



je vous remercie d'avance pour vos réponses.

1 réponse

tankerpat Messages postés 4 Date d'inscription vendredi 27 septembre 2013 Statut Membre Dernière intervention 25 septembre 2015 2
29 sept. 2013 à 17:08
Bon ben j'ai trouvé pourquoi mon intégration Verlet répondait mal, mais toujours pas pourquoi le calcul interne ne prend pas effet.

Merci...
2
Rejoignez-nous