bonsoir,
Au lieu de réouvrir un sujet j'ai bossé sur mon code et revu la gestion du clavier (j'étais à coté de la plaque au départ maintenant ca fonctionne)
Maintennt j'ai voulu gérer le clic droit de la souris pour que mon sprite vienne à l'endroit du clic en choisissant
le bon sprite à prendre (pour l'instant je ne gère pas l'affichage des sprites en diagonales).
Le souci c'est que le resultat est aléatoire des fois ca fonctionne des fois non, je ne comprend pas ...
Voici mon code (partie event_souris):
void SpriteHero::events_souris(sf::Window &win)
{
if (sf::Mouse::IsButtonPressed(sf::Mouse::Right))
{
pos_souris = sf::Mouse::GetPosition(win);
//Centre du sprite
pos_souris.x = pos_souris.x - 70;
pos_souris.y = pos_souris.y - 80;
}
if(pos_souris.x > pos_hero.x)
{
//Choix du status d'animation
status = 8;
//On incrémente les frames pour l'animation
//frame ++;
for(int i = 0; i < 16; i++)
{
//On bouge à droite
sprite_hero_marche_droite_nu_unarmed[i].Move(2,0);
//On récupère la position actuelle
pos_hero = sprite_hero_marche_droite_nu_unarmed[i].GetPosition();
//Mise à jour de la position des autres sprites directions
sprite_hero_marche_gauche_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_bas_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_haut_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
}
}
if(pos_souris.x < pos_hero.x)
{
//Choix du status d'animation
status = 9;
//On incrémente les frames pour l'animation
//frame ++;
for(int i = 0; i < 16; i++)
{
//On bouge à gauche
sprite_hero_marche_gauche_nu_unarmed[i].Move(-2,0);
//On récupère la position actuelle
pos_hero = sprite_hero_marche_gauche_nu_unarmed[i].GetPosition();
//Mise à jour de la position des autres sprites directions
sprite_hero_marche_droite_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_bas_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_haut_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
}
}
if(pos_souris.y < pos_hero.y)
{
//Choix du status d'animation
status = 10;
//On incrémente les frames pour l'animation
//frame ++;
for(int i = 0; i < 16; i++)
{
//On bouge en haut
sprite_hero_marche_haut_nu_unarmed[i].Move(0,-2);
//On récupère la position actuelle
pos_hero = sprite_hero_marche_haut_nu_unarmed[i].GetPosition();
//Mise à jour de la position des autres sprites directions
sprite_hero_marche_gauche_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_bas_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_droite_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
}
}
if(pos_souris.y > pos_hero.y)
{
//Choix du status d'animation
status = 11;
//On incrémente les frames pour l'animation
//frame ++;
for(int i = 0; i < 16; i++)
{
//On bouge en bas
sprite_hero_marche_bas_nu_unarmed[i].Move(0,2);
//On récupère la position actuelle
pos_hero = sprite_hero_marche_bas_nu_unarmed[i].GetPosition();
//Mise à jour de la position des autres sprites directions
sprite_hero_marche_gauche_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_droite_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_haut_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
}
}
}
Voila bon l'animation est moche car trop rapide en + elle ne s'arrete pas tout le temps ...
Par rapport à mon code pour le clavier lui fonctionne trés bien :
void SpriteHero::events_clavier()
{
if (sf::Keyboard::IsKeyPressed(sf::Keyboard::Right))
{
//Choix du status d'animation
status = 8;
//On incrémente les frames pour l'animation
frame ++;
for(int i = 0; i < 16; i++)
{
//On bouge à droite
sprite_hero_marche_droite_nu_unarmed[i].Move(5,0);
//On récupère la position actuelle
pos_hero = sprite_hero_marche_droite_nu_unarmed[i].GetPosition();
//Mise à jour de la position des autres sprites directions
sprite_hero_marche_gauche_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_bas_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_haut_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
}
}
if (sf::Keyboard::IsKeyPressed(sf::Keyboard::Left))
{
//Choix du status d'animation
status = 9;
//On incrémente les frames pour l'animation
frame ++;
for(int i = 0; i < 16; i++)
{
//On bouge à gauche
sprite_hero_marche_gauche_nu_unarmed[i].Move(-5,0);
//On récupère la position actuelle
pos_hero = sprite_hero_marche_gauche_nu_unarmed[i].GetPosition();
//Mise à jour de la position des autres sprites directions
sprite_hero_marche_droite_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_bas_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_haut_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
}
}
if (sf::Keyboard::IsKeyPressed(sf::Keyboard::Up))
{
//Choix du status d'animation
status = 10;
//On incrémente les frames pour l'animation
frame ++;
for(int i = 0; i < 16; i++)
{
//On bouge en haut
sprite_hero_marche_haut_nu_unarmed[i].Move(0,-5);
//On récupère la position actuelle
pos_hero = sprite_hero_marche_haut_nu_unarmed[i].GetPosition();
//Mise à jour de la position des autres sprites directions
sprite_hero_marche_gauche_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_bas_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_droite_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
}
}
if (sf::Keyboard::IsKeyPressed(sf::Keyboard::Down))
{
//Choix du status d'animation
status = 11;
//On incrémente les frames pour l'animation
frame ++;
for(int i = 0; i < 16; i++)
{
//On bouge en bas
sprite_hero_marche_bas_nu_unarmed[i].Move(0,5);
//On récupère la position actuelle
pos_hero = sprite_hero_marche_bas_nu_unarmed[i].GetPosition();
//Mise à jour de la position des autres sprites directions
sprite_hero_marche_gauche_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_droite_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
sprite_hero_marche_haut_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
}
}
}
D'ailleur je ne sais pas pourquoi l'animation est plus lente qu'avec la souris (je pense que c'est l'appui de la touche qui fait ralentir).