Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL

curseur lent

Sujet résolu
    28 novembre 2007 à 22:08:29

    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.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 novembre 2007 à 22:35:13

      Tu as vérifier que les FPS soient suffisamment élevés? Tu ne charges pas à chaque tour de boucle l'image?

      Une autre lib, oui : SFML ; elle est OO et super facile d'utilisation tout en proposant des performances élevées.
      • Partager sur Facebook
      • Partager sur Twitter
        28 novembre 2007 à 22:46:04

        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 :)

        Merci beaucoup
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          29 novembre 2007 à 15:45:16

          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.
          • Partager sur Facebook
          • Partager sur Twitter
            29 novembre 2007 à 17:48:30

            Non, mon image est chargé avant la boucle du jeu.
            Sinon je ne comprends pas très bien comment veux-tu que je teste les fps ?

            Si sa peut vous aider :)Source

            C'est un peu le désordre je l'avoue :euh:
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              29 novembre 2007 à 18:21:15

              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 :
              1. Début du programme
              2. Traitement de certaines données
              3. Création de int fps = 0;
              4. Création de timer time;
              5. Mise à zéro du timer (reset)
              6. Début de la boucle principale
              7.     ++fps;
              8.     Si time > 1seconde alors :
              9.         affichage de fps
              10.         mise à zéro de fps
              11.         reset de time
              12.     Le reste du traitement dans la boucle
              13. Fin de la boucle
              14. Traitement de certaines données
              15. Fin du programme

              les 'Traitement de certaines données' sont là que pour indiquer que tu as le droit de faire autre chose. ;)
              • Partager sur Facebook
              • Partager sur Twitter
                4 décembre 2007 à 14:22:00

                oui il ne fat pas rafraichir tout l'ecran a chaque fois mais uniquement la zone qui correspond à l'ancienne et à la nouvelle position de la souris.
                • Partager sur Facebook
                • Partager sur Twitter
                  4 décembre 2007 à 18:39:17

                  Citation : ledemonboiteux

                  oui il ne fat pas rafraichir tout l'ecran a chaque fois mais uniquement la zone qui correspond à l'ancienne et à la nouvelle position de la souris.



                  C'est possible sa en SDL ? o_O
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    4 décembre 2007 à 18:52:56

                    Oui, mais ça demanderait pas mal de calcul, et c'est pas facile à gérer... Il y a mieux avec la SDL...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 décembre 2007 à 19:23:36

                      Citation : hiura

                      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.. :p

                      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.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                        4 décembre 2007 à 20:04:07

                        Ok merci à vous.
                        Je vais essayer ces solutions.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          4 décembre 2007 à 20:51:16

                          Citation : Nanoc

                          Je sens une légère touche de publicité là-dedans.. :p


                          A bon? je suis si indiscret que ça? :euh:

                          En fait c'était même pas voulu.... :-°
                          • Partager sur Facebook
                          • Partager sur Twitter
                            5 décembre 2007 à 0:19:45

                            Citation : hiura

                            Citation : Nanoc

                            Je sens une légère touche de publicité là-dedans.. :p


                            A bon? je suis si indiscret que ça? :euh:

                            En fait c'était même pas voulu.... :-°


                            Hiura tu exagere un peu :-° , dans chaque topic tratant la SDL, tu fais de la pub pour la SFML.
                            je doute que Laurent te paye pour ça :p
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              5 décembre 2007 à 13:08:04

                              :-°
                              Non, d'hab', je l'avoue, je fait de la pub, mais là je n'y pensais même pas. :p

                              PS : je suis pas contre un peu d'argent. ;)(<rigole>)
                              • Partager sur Facebook
                              • Partager sur Twitter

                              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.
                              • Editeur
                              • Markdown