Bonjour,
je viens vers vous pour un soucis que je ne vois comment débugger.
Je programme un Tetris pour me faire la main, tant avec le C++ qu'avec la SFML.
Mon problème apparait à deux moment différents et je suppose que l'origine est commune, sans pourvoir l'affirmer :
1 )
En quittant avec la croix2 )
Lors de l'affichage des composants sf::Text de l'objet scene_Game_data1 )
En quittant avec la croixLe message d'erreur est le suivant "....exe has triggered a break point", puis "Unhandled expecption at .... Un segment de mémoire a été endommagé..."
voir windowClose_1_2.PNG et windowClose_2_2.PNG en pièces jointes
Mon jeu est composé de deux "scènes", le menu et l'espace où je joue.
Quand je quitte avec la croix depuis le menu, le bug n'apparait jamais.
En revanche si je fais "Play", j'entre dans la nouvelle "scène". Puis si j’appuie sur la croix, l'erreur apparait. Pas toujours mais 'mettons tout le temps (9 fois sur 10).
2)
Lors de l'affichage des composants sf::Text de l'objet scene_Game_datavoir window_draw_itr_1_1.PNG
Lorsque je fais un mouvement avec ma pièce, que ce soit sur la gauche ou la droite. J'ai l'impression que le
problème n’existe qu'avec la première pièce qui chute. Pas celle d'après.
Au démarrage de mon programme je créé deux objets :
Scene_Menu
Scene_Game
Ensuite, selon un enum de type "Scene", j'indique si je dois "update" et "draw" telle ou telle scene.
Scene_Game est lui même composé de deux objets:
- Scene_Game_Data
- Scene_Game_PlayingSpace
(pour essayer de mieux visualiser j'ai faire un petit dessin "Explications_1_X.png"
Ma partie de Tetris commence dès que j’appuie sur le bouton Play.
A ce moment la pièce commence à descendre seule, ou lorsque j’appuie sur le bas. Je peux la déplacer latéralement, c'est là que je provoque l'erreur 2.
Je sais pertinemment qu'il manque des explications. N'hésitez pas à me demander plus d'info.
Pour le code, je n'ai aucune idée de ce qui pourrait vous interesser.
Voici mon main pour vous mettre des choses sous la dent en attendant :
int main(){
RenderWindow window;
window.create(VideoMode(WIN_WIDTH, WIN_HEIGHT, 32), "Un titre", sf::Style::Default);
window.setVerticalSyncEnabled(true);
Event event;
State currentState(State::Menu);
SharedContext* sharedContext= SharedContext::GetInstance(window, event, currentState);
Scene_Menu scene_menu;
Scene_Game scene_game(sharedContext->getWindow());
while (sharedContext->getWindow().isOpen()) {
sharedContext->getWindow().pollEvent(event);
switch (event.type) {
case Event::Closed:
sharedContext->getWindow().close();
break;
default:
break;
}
sharedContext->getWindow().clear(Color::Black);
switch (currentState) {
case State::Menu:
scene_menu.update();
scene_menu.draw();
if (scene_menu.getToQuit())
currentState = State::Quit;
if (scene_menu.getToGame())
currentState = State::Game;
break;
case State::Game:
scene_game.update();
scene_game.draw();
break;
case State::Options:
break;
case State::Credits:
break;
case State::Quit:
std::cout << "3" << std::endl;
sharedContext->getWindow().close();
std::cout << "4" << std::endl;
break;
default:
break;
}
sharedContext->getWindow().display();
}
return 0;
}