Introduction
Bonjour, je suis actuellement sur un projet utilisant la SFML, mais en voulant dessiner un sprite puis une shape, le programme renvoie un segmentation faut dès que je ferme la fenêtre.
Détails
Voici le code minimal qui plante :
sf::Texture texture;
sf::Sprite sprite;
sf::CircleShape shape;
sf::RenderWindow window(sf::VideoMode(225, 225), "Window");
if(!texture.loadFromFile("textures/texture.png", sf::IntRect(0, 0, 225, 225)))
{
std::cerr << "Unable to load texture.png" << std::endl;
return -1;
}
sprite.setTexture(texture);
shape.setRadius(200);
shape.setFillColor(sf::Color::Green);
while(window.isOpen())
{
sf::Event event;
while(window.pollEvent(event))
{
switch(event.type)
{
case sf::Event::Closed:
window.close(); //C'est à ce moment là que ça à l'air de planter.
return 0;
break;
case sf::Event::KeyPressed:
break;
default:
break;
}
}
window.clear();
window.draw(sprite);
window.draw(shape); //si je le dessine avant ou pas du tout, ça ne plante pas.
window.display();
}
Sinon je suis sous Windows 7, j'utilise g++ que j'ai téléchargé via le lien directement dans la page de téléchargement de la SFML (MinGW Builds 6.1.0 (64-bit)), et la SFML j'ai pris GCC 6.1.0 MinGW (SEH) - 64-bit.
Le code de la compilation ressemble à ça :
g++ -std=c++17 -Wall -Wextra -pedantic -c src/*.cpp -I include/ -I C:/SFML-2.4.2/include
g++ *.o -o tmp.exe -L C:/SFML-2.4.2/lib -lsfml-system -lsfml-graphics -lsfml-window -lsfml-main
Je vous remercie de votre aide.
Salut Pepito,
Pourquoi fais-tu un return dans un switch-case ? Pour ma part ce code source minimal fortement inspiré du tien fonctionnement parfaitement, je te laisse comparer pour déceler de toi-même tes erreurs ;)
Voici un code source minimal fonctionnel :
#include <SFML/Graphics.hpp>
int main(){
sf::RenderWindow window({225, 255}, "Window");
sf::Sprite sprite;
sf::CircleShape shape;
sf::Texture texture;
if(!texture.loadFromFile("texture/texture.png", sf::IntRect(0, 0, 225, 225)))
return 0;
sprite.setTexture(texture);
shape.setRadius(200);
shape.setFillColor(sf::Color::Green);
sf::Event event;
while(window.isOpen()){
while(window.pollEvent(event)){
switch(event.type){
case sf::Event::Closed :
window.close();
break;
}
}
window.clear();
window.draw(sprite);
window.draw(shape);
window.display();
}
return 0;
}
Cordialement G
Salut Pepito,
Pourquoi fais-tu un return dans un switch-case ? Pour ma part ce code source minimal fortement inspiré du tien fonctionnement parfaitement, je te laisse comparer pour déceler de toi-même tes erreurs ;)
Voici un code source minimal fonctionnel :
#include <SFML/Graphics.hpp>
int main(){
sf::RenderWindow window({225, 255}, "Window");
sf::Sprite sprite;
sf::CircleShape shape;
sf::Texture texture;
if(!texture.loadFromFile("texture/texture.png", sf::IntRect(0, 0, 225, 225)))
return 0;
sprite.setTexture(texture);
shape.setRadius(200);
shape.setFillColor(sf::Color::Green);
sf::Event event;
while(window.isOpen()){
while(window.pollEvent(event)){
switch(event.type){
case sf::Event::Closed :
window.close();
break;
}
}
window.clear();
window.draw(sprite);
window.draw(shape);
window.display();
}
return 0;
}
Cordialement G
Bonjour Guillaume__,
j'avoue que mon return n'est pas très utile. Le code que tu m'as donné fonctionne pas non plus. Donc ce serait soit à cause de ma version de la SFML, de mon OS ?
Aussi, je sais pas si tu actives les warning quand tu compiles, mais il est conseillé d'utiliser "default: break;" à la fin d'un switch car sans ça, il t'affiche une dizaine d'erreurs (tout les events possibles) :
src/main.cpp:28:19: warning: enumeration value 'LostFocus' not handled in switch
[-Wswitch]
src/main.cpp:28:19: warning: enumeration value 'GainedFocus' not handled in swit
ch [-Wswitch]
src/main.cpp:28:19: warning: enumeration value 'TextEntered' not handled in swit
ch [-Wswitch]
src/main.cpp:28:19: warning: enumeration value 'KeyPressed' not handled in switc
h [-Wswitch]
src/main.cpp:28:19: warning: enumeration value 'KeyReleased' not handled in swit
ch [-Wswitch]
src/main.cpp:28:19: warning: enumeration value 'MouseWheelMoved' not handled in
switch [-Wswitch]
src/main.cpp:28:19: warning: enumeration value 'MouseWheelScrolled' not handled
in switch [-Wswitch]
etc...