Bonsoir tout le monde,
Je me suis mis à coder un morpion, tout marche.
Par contre j'ai voulus améliorer une chose : le curseur.
Le curseur sera une petite croix quand c'est joueur croix qui joue et inversement. Pour faire ce curseur j'attend un évènement si la souris a bougé je met a jour l'écran et je blit le curseur.
LE problème le curseur devant souvent être bliter il faut chaque fois effacé l'écran. Pour cela il faut bliter le fond puis vérifier case par case (tableau 2D) si il n'y a pas de croix ou rond, si oui la bliter.
Bref c'est assez lourd surtout si sa recommence à chaque mouvement de souris.
Ma question est donc la suivante :
y a-t-il une meilleure façon de faire en SDL, sinon vers quel librairie m'orienter ?
[edit] ce que j'entends par curseur lent, c'est que le curseur clignote.
Il n'y a pas vraiment de fps, mais un fraps par mouvement de souris.
Sinon j'ai essayé ta seconde suggestion. Je blit le curseur tout les 5 mouvements de souris. Sa marche mieux : curseur clignote plus ou presque. Mouvement du curseur pas exactement fluide mais sa m'ira
Tu as mal compris ce que je voulais dire.
-> Le nombre de FPS (frame per second = image par seconde) est il supérieur à 24? (crées un test pour savoir).
-> Quand je dis "Tu ne charges pas à chaque tour de boucle l'image?" j'entends par la que tu ne fais pas de IMG_Load (ou autre fonction similaire). Je ne sais pas si tu le fais, mais ne le fais jamais. Il faut charger une fois et c'est tout. Le blit ce fait à tous les tours de boucle.
Je ne vais pas les lire (pas le temps). Il faut utiliser un timer, et à chaque tour de boucle tu incrémente une variable. Quand le timer dépasse 1seconde tu affiches (fichier, écran, ...) la variable puis tu la remets à 0, et tu redémarre* le timer.
* : je ne sais pas si la SDL permet de remettre à éro un timer, avec la SFML on peut (sf::Clock).
Voici un pseudo code :
Début du programme
Traitement de certaines données
Création de int fps = 0;
Création de timer time;
Mise à zéro du timer (reset)
Début de la boucle principale
++fps;
Si time > 1seconde alors :
affichage de fps
mise à zéro de fps
reset de time
Le reste du traitement dans la boucle
Fin de la boucle
Traitement de certaines données
Fin du programme
les 'Traitement de certaines données' sont là que pour indiquer que tu as le droit de faire autre chose.
Oui, mais ça demanderait pas mal de calcul, et c'est pas facile à gérer... Il y a mieux avec la SDL...
Je sens une légère touche de publicité là-dedans..
Sinon pour répondre à la question originelle, il y a peut-être la solution suivante:
Tu sauvegardes l'état courant de l'écran puis tu redessines par-dessus la zone qui a changé. (La souris dans sa nouvelle position + le fond là où la souris n'est plus) Puis tu blit cet écran directement dans la fenêtre. Maintenant je suis pas sûr que ce soit plus rapide à moins que le dessin à faire soit complexe et sûrement pas plus simple.
Non, d'hab', je l'avoue, je fait de la pub, mais là je n'y pensais même pas.
PS : je suis pas contre un peu d'argent. (<rigole>)
SDL
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
* Un wrapper C++ pour sqlite * Une alternative a boost units