Bonjour,
Voilà j'ai un ptit problème, j'ai regarder le tuto SFML sur la gestion du temps, et j'ai décidé de ne pas utiliser de clock, mais App.GetFrame(). Je fais donc une fonction qui l'utilise, mais j'ai plusieurs problèmes ( enfin deux je crois, dont un ne concerne pas SFML ). Si vous vouliez bien m'aider, ce serait super ^^
Voilà le code : http://rafb.net/p/o3tuJ872.html
Ce qu'il se passe, c'est que le perso est bien affiché, mais il scintille et reste sur place. La boucle n'atteint jamais 10 aussi, donc ça ne s'arrête jamais, c'est vraiment étrange.
Merci de votre aide en tous cas,
Bye.
lance ton programme au débogueur ou alors mets des cout partout. Si ça ne termine pas c'est que soit display, soit afficher soit getframe ne termine pas.
Merci de ta réponse dnob, mais j'avoue être assez mal renseigné, le débogueur de Code::blocks n'a pas l'air de fonctionner ( ou plutôt je ne sais pas comment le faire fonctionner, et je trouve pas de tuto ) et mettre des cout partout... que veux-tu dire ?
Je peux pas vérifier si une fonction fonctionne ou pas, si ?
Hum, je n'arrive pas non plus a faire fonctionner le débogger sous Code::blocks.
Tu met des cout partout pour savoir ou ça plante, ou alors tu peux écrire dans un fichiers texte, ou encore faire une attente de x secondes.
mettre des cout partout c'est à dire qu'entre chaque ligne tu mets une instruction de sortie du genre :
cout << __LINE__ << endl;
et comme ça tu sais par où passe ton programme et où est-ce qu'il s'arrête ou boucle. Ça ne résout pas ton problème mais ça permet d'en localiser la cause.
mouai, cette solution ça va bien pour un programme de moins de 100 lignes, après c'est la galère.
Met des break points un peu partout avec ton debugger.
Essaie de mettre Display en dernière instruction.
"Met des break points un peu partout avec ton debugger."
J'arrive pas à le faire fonctionner, je mets des break points, je lance le débug et il me dit que mon projet est pas configuré, que je dois aller dans build options, j'y ai été et j'ai coché la case du débug mais ça fonctionne toujours pas.
"Essaie de mettre Display en dernière instruction."
C'est déjà fait.
"mouai, cette solution ça va bien pour un programme de moins de 100 lignes, après c'est la galère. "
Vu que c'est qu'une fonction ( de 5 lignes ) qui bug, ça devrait aller ^^
Mince j'ai fait ce que tu m'as dit dnob, et il fait exactement ce qu'il faut : il execute les lignes 1,2,3,4,5 ( fonction ) et même la ligne 6 quand la condition est vraie ( donc Running = false ).
Je comprends rien, pourquoi ça bouge pas ? Pourquoi il quitte pas la boucle ?
Affiche la variable 'tour' a chaque ligne.
Une de tes fonctions doit la modifier par dépassement de mémoire ou autre, d'où le fait que ça ne se termine jamais.
Si c'est pas ça, je vois pas.
souvent c'est l'inverse avec les depassement de buffers. Ce que tu vois, c'est la variable avec une valeure débile, mais tu ne sais pas qui a écrit dessus.
J'ai fait ce que tu m'as dit ElHuron, la variable tour fait un truc du genre :
0
0
0
0
1
1
1
1
etc ...
Il va bien à dix, mais il quitte pas la boucle.
"mouai, cette solution ça va bien pour un programme de moins de 100 lignes, après c'est la galère. "
Je suis d'accord avec toi, mais sur un petitprogramme ça ne pose pas de problème et, parfois, même sur un grand programme tu n'a pas le choix.
Il y a quelques jours encore j'ai traqué un segfault à coups de "cout" dans un programme absolument gigantesque pour la simple raison que je ne pouvais pas le compiler en mode debug et donc je ne pouvais pas le lancer dans un débogueur (d'autre part, gdb ne vaut pas beaucoup plus que des impressions dans le code source, si on ne peut pas utiliser le débogueur de Visual C++ qui est vraiment formidable).
Hum, fort étrange, faut voir avec le reste du programme.
Mais sinon, je te conseille de lâcher ta boucle while pour la boucle for, mais bon, logiquement, le problème ne seras pas résolu... ![]()
Quand la variable tour vaux 10, normalement, ça devrais quitter ta boucle, mais elle le fait pas, donc, elle continue de s'incrémenter ?
C'est lourd les incoérences
Sur mon projet, j'ai des bugs, mais très rares, soit, ils coupent le programme, soit il y a un dysfonctionnement de quelque chose, mais vu que ça se passe pas souvent, je doit réviser tout le code ![]()
Arf c'est très chiant en effet, car je sais pas faire autrement que comme ça, et j'étais bien partis ...
Bon je vais tenter de mettre for plus tard, peut-être qu'avec un petit peu de chance ...
Ha du nouveau peut-être, j'ai remarquer que j'obtiens cette erreur quand je mets mon application en mode console :
http://img301.imageshack.k.us/img301/9919/erreurbr7.png
ca c'est une segfault, tu as un pointeur dans les choux! ![]()
D'après le code, tu dirais que c'est lequel, car honnêtement je ne vois pas du tout le problème ( suis-je aveugle ? ).
En fait, je ne sais même pas comment on peut faire pour "perdre" un pointeur, je n'ai pas assez d'expérience en la matière >_<
Désolé, mais je me permets un petit
vu que mon problème n'a pas avancé depuis la semaine passée...
re-post ton code il n'est plus en ligne.
Si tu peut, up load une archive quelque part contenant tout ton projet exactement comme il est, que l'on puisse regarder.
avec code::blocks tu peux générer un fichier html de ton code ( en gardant la coloration syntaxique ) et ainsi le mettre sur un ftp ![]()
int left = personnage->GetX();
int top = personnage->GetY();
int Speed = 1;
int frames = 0;
for ( int i = 0; i < 10; i ++ )
{
frames = (int) App->GetFrameTime();
left += Speed * frames;
personnage->Afficher(App,1,1,left,top);
App->Display();
}
C'est tout ce qui nous intéresse, et j'ai remarqué qu'en fait la variable frames reste tout le temps à zéro, c'est donc surement celle-ci qui n'est pas allouée. Ce serait la fonction getframetime qui bugerait ?