Bonsoir,
j'ai un problème lorsque je déplace ma view et que j'essaye de déplacer un personnage.
Indépendamment, les deux fonctionnent très bien, mais quand je déplace ma view et que je clique sur un sprite avec la texture de sélection, le résultat est assez aléatoire : si je déplace une ou deux fois la view, le personnage ne va pas aller au bon endroit, et si je la déplace plus il ne bouge plus du tout.
En revanche, pas de problèmes si je ne bouge pas ma vue.
Je n'ai mis que les parties concernées afin que la page ne fasse pas 3 km.
main.cpp
int main()
{
RenderWindow app(VideoMode(1250, 750), "SFML window");
Carte carte("lvl5");
Personnage perso("hero1", 5, 3);
View view1 = app.getDefaultView();
while (app.isOpen())
{
Event event;
while (app.pollEvent(event))
{
if (event.type == Event::MouseButtonReleased)
{
if (event.mouseButton.button == Mouse::Right)
perso.bouge(event.mouseButton.x, event.mouseButton.y, &carte);
}
if (event.type == Event::Resized){
FloatRect visibleArea(0, 0, event.size.width, event.size.height);
app.setView(View(visibleArea));
}
if (Keyboard::isKeyPressed(Keyboard::Up)) { view1.move(0, -50);}
if (Keyboard::isKeyPressed(Keyboard::Right)){view1.move(50, 0);}
if (Keyboard::isKeyPressed(Keyboard::Down)){view1.move(0, 50);}
if (Keyboard::isKeyPressed(Keyboard::Left)) {view1.move(-50, 0);}
if (event.type == Event::Closed)
app.close();
}
app.setView(view1);
app.clear(Color::Blue);
perso.canMove(&carte); // Vérifie où le personnage peut se déplacer et décide des sprites à afficher en conséquences
carte.draw(&app);
perso.draw(&app);
app.display();
}
return EXIT_SUCCESS;
}
carte.cpp
void Carte::getMove(int pixX, int pixY, int deplacement) { // Fonction décrite juste au dessus (qui passe d'abord par le personnage)
for (int i (0-deplacement); i <= deplacement; i++) {
for (int j (0-deplacement); j <= deplacement; j++) {
if (m_tabSquare[pixX+i][pixY+j+1].getPassage() == 0) {
if (abs(i) + abs(j) > deplacement) {}
else if (i == 0 && j == 0) {}
else { m_tabSquare[pixX+i][pixY+j].moveSquare(); }
}
else {}
}
}
}
personnage.cpp
Personnage::Personnage(){}
Personnage::Personnage(std::string persoName, int pixX, int pixY): m_pixX(pixX), m_pixY(pixY) {
if (!m_textPerso.loadFromFile("textures\\" + persoName + ".png")) { cout << "Erreur chargement : texture personnage" << endl; }
m_spritePerso.setTexture(m_textPerso);
m_spritePerso.setPosition(m_pixX*50, m_pixY*50);
m_deplacement = 3;
}
Personnage::~Personnage() {}
void Personnage::draw (RenderWindow* app) { app->draw(m_spritePerso); }
void Personnage::canMove (Carte* carte) { carte->getMove(m_pixX, m_pixY, m_deplacement); }
void Personnage::bouge (int sourisx, int sourisy, Carte* carte) {
// Je convertit les coordonnées de la souris car ma carte est juste une image de plusieurs pixel
int pixSourisX = round(sourisx/50);
int pixSourisY = round(sourisy/50);
if (carte->moveOk(pixSourisX, pixSourisY, m_deplacement) == 1) {
m_pixX = pixSourisX;
m_pixY = pixSourisY;
m_spritePerso.setPosition(m_pixX*50, m_pixY*50);
}
else {}
}
Merci d'avance pour vos réponses !