Bonsoir à tous.
Je ne sais pas si l'erreur vient de SFML ou pas...
En tout cas, elle me pose vraiment problème, je cherche je cherche mais je ne trouve rien qui pourait être la cause de l'erreur.
J'arrive à compiler, mais le programme crash au lancement...
Désolé pour tout ce Code mais vu que tout à l'air concerné par l'erreur, j'ai préféré tout vous montrer l'erreur se situerait dans la fonction Objet::Draw
// main.cpp
using namespace sf;
int main()
{
RenderWindow window(VideoMode(800, 600), "Test");
FileManager::Get().addTexture("res/logo.png");
Objet image;
image.SetFond(FileManager::Get().getTexture("res/logo.png"),1);
image.SetFond(Color(255,255,155));
image.Center(true);
Page page;
page.SetFond(Color(255,155,255),Color(205,145,5),3);
page.newObjet(image);
while (window.isOpen())
{
Event event;
while (window.pollEvent(event))
{
if (event.type == Event::Closed)
window.close();
if (event.type == Event::Resized)
{
window.setView(View(sf::FloatRect(0, 0, event.size.width, event.size.height)));
}
}
page.Draw(&window);
window.display();
}
return EXIT_SUCCESS;
}
//Objet.h
class Objet
{
public:
Objet();
Objet(sf::Vector2f Taille,sf::Vector2f Position);
void update();
void SetFond(sf::Color Couleur);
void SetFond(sf::Color Couleur1,sf::Color Couleur2, int Dir); // dir=0 vert dir=1 horiz dir=2 diag1 dir=3 diag2
void SetFond(sf::Texture* Texture, bool repet); // true répeté false étiré
void SetTaille(sf::Vector2f Taille);
void SetPosition(sf::Vector2f Position);
void SetScale(sf::Vector2f Scale);
void SetScale(float Scale);
void Center(bool center);
void Draw(sf::RenderWindow *window);
protected:
sf::Vector2f m_Taille;
sf::Vector2f m_Position;
sf::Vector2f m_Scale;
sf::VertexArray m_Fond;
sf::Texture *m_ImageFond;
bool m_Center;
bool m_IsImageFond;
private:
};
//Objet.cpp
#include "../include/Objet.h"
using namespace sf;
Objet::Objet():m_Taille(100,100),m_Position(0,0),m_Scale(1,1), m_Center(false), m_IsImageFond(false)
{
m_Fond=VertexArray(sf::TrianglesFan, 4);
update();
}
Objet::Objet(sf::Vector2f Taille,sf::Vector2f Position):m_Taille(Taille),m_Position(Position),m_Scale(1,1), m_Center(false), m_IsImageFond(false)
{
m_Fond=VertexArray(sf::TrianglesFan, 4);
update();
}
void Objet::SetFond(sf::Color Couleur)
{
m_Fond[0].color = Couleur;
m_Fond[1].color = Couleur;
m_Fond[2].color = Couleur;
m_Fond[3].color = Couleur;
}
void Objet::SetFond(sf::Color Couleur1,sf::Color Couleur2, int Dir) // dir=0 vert dir=1 horiz dir=2 diag1 dir=3 diag2
{
switch(Dir)
{
case 0:{
m_Fond[0].color = Couleur1;
m_Fond[1].color = Couleur2;
m_Fond[2].color = Couleur2;
m_Fond[3].color = Couleur1;
}break;
case 1:{
m_Fond[0].color = Couleur1;
m_Fond[1].color = Couleur1;
m_Fond[2].color = Couleur2;
m_Fond[3].color = Couleur2;
}break;
case 2:{
m_Fond[0].color = Couleur1;
m_Fond[1].color = ColorMix(Couleur1,Couleur2);
m_Fond[2].color = Couleur2;
m_Fond[3].color = ColorMix(Couleur1,Couleur2);
}break;
case 3:{
m_Fond[0].color = ColorMix(Couleur1,Couleur2);
m_Fond[1].color = Couleur1;
m_Fond[2].color = ColorMix(Couleur1,Couleur2);
m_Fond[3].color = Couleur2;
}break;
default:{
m_Fond[0].color = ColorMix(Couleur1,Couleur2);
m_Fond[1].color = ColorMix(Couleur1,Couleur2);
m_Fond[2].color = ColorMix(Couleur1,Couleur2);
m_Fond[3].color = ColorMix(Couleur1,Couleur2);
}break;
}
}
void Objet::SetFond(Texture* Texture, bool repet)
{
Image img;
m_ImageFond=Texture;
m_IsImageFond=true;
}
void Objet::SetTaille(sf::Vector2f Taille)
{
m_Taille=Taille;
update();
}
void Objet::SetPosition(sf::Vector2f Position)
{
m_Position=Position;
update();
}
void Objet::SetScale(sf::Vector2f Scale)
{
if(Scale.x >0.000001 || Scale.x < -0.000001 || Scale.y >0.000001 || Scale.y <-0.000001)
m_Scale=Scale;
}
void Objet::SetScale(float Scale)
{
if(Scale >0.000001 || Scale < -0.000001)
m_Scale=Vector2f(Scale,Scale);
}
void Objet::Center(bool center)
{
m_Center=center;
}
void Objet::Draw(RenderWindow *window)
{
if(m_IsImageFond)
SetTaille(Vector2f(m_ImageFond->getSize()));
SetTaille(Vector2f(m_Taille.x*m_Scale.x,m_Taille.y*m_Scale.y));
if(m_Center)
SetPosition(Vector2f(window->getView().getSize().x/2-m_Taille.x/2+m_Position.x,window->getView().getSize().y/2-m_Taille.y/2+m_Position.y));
if(m_IsImageFond)
window->draw(m_Fond, m_ImageFond);
else
window->draw(m_Fond);
if(m_Center)
SetPosition(Vector2f(-(window->getView().getSize().x/2-m_Taille.x/2)+m_Position.x,-(window->getView().getSize().y/2-m_Taille.y/2)+m_Position.y));
SetTaille(Vector2f(m_Taille.x/m_Scale.x,m_Taille.y/m_Scale.y));
}
void Objet::update()
{
m_Fond[0].position = Vector2f(m_Position.x, m_Position.y);
m_Fond[1].position = Vector2f(m_Position.x+m_Taille.x, m_Position.y);
m_Fond[2].position = Vector2f(m_Position.x+m_Taille.x, m_Position.y+m_Taille.y);
m_Fond[3].position = Vector2f(m_Position.x, m_Position.y+m_Taille.y);
if(m_IsImageFond)
{
m_Fond[0].texCoords= Vector2f(0,0);
m_Fond[1].texCoords= Vector2f(m_ImageFond->getSize().x,0);
m_Fond[2].texCoords= Vector2f(m_ImageFond->getSize().x,m_ImageFond->getSize().y);
m_Fond[3].texCoords= Vector2f(0,m_ImageFond->getSize().y);
}
}
//Page.h
class Page : public Objet
{
public:
Page();
void newObjet(Objet obj);
void lraw(sf::RenderWindow *window);
protected:
private:
std::vector< Objet > m_Objets;
};
// page.cpp
using namespace sf;
using namespace std;
Page::Page():Objet()
{
}
void Page::newObjet(Objet obj)
{
m_Objets.push_back(obj);
}
void Page::Draw(RenderWindow *window)
{
Draw(window);
if(m_Objets.size()!=0)
{
for(int i(0);i<=m_Objets.size();i++)
{
m_Objets[i].Objet::Draw(window);
}
}
}
Merci d'avance, votre aide serait vraiment indispensable, je ne trouve vraiment pas