Bonjour, je suis en train de programmer un casse briques sous Visual C++ avec les mfc.
Pour l'affichage de la balle et du jeu, j'utilise un timer qui appelle une fonction affichage() (je ne passe pas par redraw) qui va via une série de buffer blit l'image du jeu sur l'écran voici les grandes étapes :
- Chargement des bitmaps via les méthodes LoadBitmap
- création d'un buffer virtuel pour chaque image (via CreateCompatibleDC puis selectObjet )
- blittage des buffer sur le buffer contenant l'image du fond
- et enfin blittage entre le buffer de l'image du fond(qui contient tous les élèments) et l'ecran
- apres viens le moment ou je decharge via des selectObject, deleteObject,deleteDC.
Mon problème est le suivant, lorsque le bitmap du fond est de petit taille (<100ko) le jeu tourne plutot bien, mais si je prend une grosse image (700x600 pour un poids de 1 Mo) ca devient lent (mais ca reste fluide) même avec un timer au minimum.
J'ai essayé plusieurs pistes pour eviter que le jeu ralentisse mais je ne suis pas arriver à les mettre en places :
- Utiliser pour le fond une textures de petite taille/poid et l'agrandir sur le buffer du fond(peut etre via strechtblt)
- Afficher l'image du fond dans le redraw uniquement et afficher un buffer transparent (en le blittant avec transparentblt)
- Précharger les images via une méthode différente de affichage() pour ainsi ne pas faire un loadbmp a chaque appel de affichage()
J'ai aussi entendu parler de de 'DDB' et 'DIB', est ce que cela pourrait m'aider, en fait je ne sais pas de quoi il s'agit.
Bref je suis grand débutant dans la programation de gdi, si quelqu'un avait des idées ou a déjà eu un probleme similaire : je suis preneur .
++
SJ
Partager