slt
Je suis débutant en programmation, je réalise un bomberman en c++ avec SFML sous Visual studio 2008 et là jai une erreur d'exception. lorsque j'essai de compiler mon code. Pourriez vous m'aider ?
voici l'erreur en question :
Unhandled exception at 0x008614ac in testtest.exe: 0xC0000005: Access violation reading location 0xccccccd0.
voici mon code menu.cpp :
#include <SFML/Graphics.hpp>
#include "menu.h"
#include "mouseEvent.h"
Menus::Menus()
{
bool principal = true;
bool instruction = false;
bool choixPerso = false;
bool jouer = false;
bool quitterBoucle = true;
}
Menus::~Menus(void)
{
}
void Menus::MenuPrincipal(sf::RenderWindow *window )
{
sf::Image fondMenu;
sf::Sprite SpriteFondMenu;
// on charge le fond et on l'associe au fond
fondMenu.LoadFromFile("images/menu/FondMenu.png");
SpriteFondMenu.SetImage(fondMenu);
//SpriteFondMenu.SetCenter((SpriteFondMenu.GetSize().x/2), (SpriteFondMenu.GetSize().y/2));
//SpriteFondMenu.SetPosition((window->GetWidth()/2), (window->GetHeight()/2));
SpriteFondMenu.SetCenter(0, 0);
SpriteFondMenu.SetPosition(0, 0);
sf::Image newGame1;
sf::Image newGame2;
sf::Sprite SpriteNewGame;
sf::Image instruction1;
sf::Image instruction2;
sf::Sprite SpriteInstruction;
sf::Image quitter1;
sf::Image quitter2;
sf::Sprite SpriteQuitter;
newGame1.LoadFromFile("images/menu/newGame1.png");
newGame2.LoadFromFile("images/menu/newGame2.png");
SpriteNewGame.SetImage(newGame1);
//SpriteNewGame.SetPosition(936, 470);
SpriteNewGame.SetPosition(400, 450);
instruction1.LoadFromFile("images/menu/instruction1.png");
instruction2.LoadFromFile("images/menu/instruction2.png");
SpriteInstruction.SetImage(instruction1);
SpriteInstruction.SetPosition(400, 500);
quitter1.LoadFromFile("images/menu/quitter1.png");
quitter2.LoadFromFile("images/menu/quitter2.png");
SpriteQuitter.SetImage(quitter1);
SpriteQuitter.SetPosition(400, 550);
bool quitterBoucle = false;
while (window->IsOpened() && !quitterBoucle)
{
// Traitement des évènements
sf::Event Event;
while (window->GetEvent(Event))
{
// Fenêtre fermée : on quitte
if (Event.Type == sf::Event::Closed)
window->Close();
// Touche 'echap' appuyée
if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
window->Close();
}
mouseEvent mouseEvent(window);
mouseEvent.onRollOver(&SpriteNewGame, &newGame1, &newGame2);
mouseEvent.onRollOver(&SpriteInstruction, &instruction1, &instruction2);
mouseEvent.onRollOver(&SpriteQuitter, &quitter1, &quitter2);
window->Draw(SpriteFondMenu);
window->Draw(SpriteNewGame);
window->Draw(SpriteInstruction);
window->Draw(SpriteQuitter);
if(mouseEvent.onClicEvent(&SpriteNewGame))
{
this->principal = false;
this->choixPerso = true;
this->quitterBoucle = true;
MenuChoixPerso(window);
}
if(mouseEvent.onClicEvent(&SpriteInstruction))
{
this->principal = false;
this->instruction = true;
}
if(mouseEvent.onClicEvent(&SpriteQuitter))
{
window->Close();
}
window->Display();
}
}
void Menus::MenuInstructions(sf::RenderWindow *window)
{
}
void Menus::MenuChoixPerso(sf::RenderWindow *window)
{
//affichage des perso et selection
this->choixPerso= false;
this->quitterBoucle = true;
this->jouer =true;
sf::Image perso1;
sf::Image perso1Bis;
sf::Sprite SpritePerso1;
sf::Image perso2;
sf::Image perso2Bis;
sf::Sprite SpritePerso2;
sf::Image perso3;
sf::Image perso3Bis;
sf::Sprite SpritePerso3;
perso1.LoadFromFile("images/menu/mario.png");
perso1Bis.LoadFromFile("images/menu/croix.png");
perso2.LoadFromFile("images/menu/thief.png");
perso2Bis.LoadFromFile("images/menu/ipad.png");
perso3.LoadFromFile("images/menu/vip.gif");
perso3Bis.LoadFromFile("images/menu/chrome.png");
SpritePerso1.SetImage(perso1);
SpritePerso1.SetPosition(950, 470);
SpritePerso2.SetImage(perso2);
SpritePerso2.SetPosition(400, 350);
SpritePerso3.SetImage(perso3);
SpritePerso3.SetPosition(425, 300);
while (window->IsOpened())
{
sf::Event Event;
while(window->GetEvent(Event))
{
// Fenêtre fermée : on quitte
if (Event.Type == sf::Event::Closed)
window->Close();
// Touche 'echap' appuyée
if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
window->Close();
}
mouseEvent mouseEvent(window);
mouseEvent.onRollOver(&SpritePerso1, &perso1, &perso1Bis);
mouseEvent.onRollOver(&SpritePerso2, &perso2, &perso2Bis);
mouseEvent.onRollOver(&SpritePerso2, &perso3, &perso3Bis);
window->Draw(SpritePerso1);
window->Draw(SpritePerso2);
window->Draw(SpritePerso3);
if(mouseEvent.onClicEvent(&SpritePerso1) || mouseEvent.onClicEvent(&SpritePerso2) || mouseEvent.onClicEvent(&SpritePerso3))
{
//instancier jeux
Jeux game(window);
//appeler game()
game.game();
}
window->Display();
}
voici le main
#include <SFML/Graphics.hpp>
#include "jeux.h"
#include "menu.h"
#include "jeux.h"
int main()
{
//création de notre fenêtre d'affichage en 800 par 600 nomé Bomberman et en fenêtré
sf::RenderWindow window(sf::VideoMode(800, 600, 32), "Bomberman");
// utilisation de la synchronisation vertical
window.UseVerticalSync(true);
//on crée menu1
Menus menu1;
while (1)
{
if(menu1.principal)
{
menu1.MenuPrincipal(&window);
}
else if (menu1.instruction)
{
menu1.MenuInstructions(&window);
}
else if (menu1.choixPerso)
{
menu1.MenuChoixPerso(&window);
}
}
return EXIT_SUCCESS;
}
Merci d'avance pour votre aide