tankerpat
Messages postés4Date d'inscriptionvendredi 27 septembre 2013StatutMembreDernière intervention25 septembre 2015
-
27 sept. 2013 à 02:10
tankerpat
Messages postés4Date d'inscriptionvendredi 27 septembre 2013StatutMembreDernière intervention25 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();