Question

Je suis un peu novice en c ++ et j'essaie de créer un jeu. J'ai un tableau 2D RECT_GRID de rectangles. J'ai une grille de tableau 2D de unsigned short. Je remplis le tableau rectangle pendant WM_CREATE

L'événement WM_PAINT peint des rectangles pour tous les éléments du tableau. La couleur du rectangle est basée sur la valeur de GRID [x] [y]

Je l'ai fait de sorte que lorsque la touche bas est enfoncée, la couleur de l'un des rectangles est modifiée en définissant GRID [1] [XMOVE] = sur une couleur différente. alors il invalide le rectangle du client

En gros, ce qui se passe, c’est que ça marche bien pendant un moment, mais finalement, ça arrête de dessiner. J'ai vérifié ma variable XMOVE lors du débogage, j'ai vérifié par valeurs de grille et tout et tout va bien. Lorsque je supprime la boucle for de l'événement paint et que je me concentre sur un rectangle spécifique, cela n'échoue jamais, mais si j'essaie de les redessiner tous en même temps, après environ 20 fois, la peinture est arrêtée. Qu'est-ce qui pourrait causer ça? Je suis nouveau sur c ++ et je parie que je ne peins pas correctement et que je ne déborde pas ou quelque chose du genre.

Si quelqu'un pouvait expliquer ce qui ne va pas ou une manière appropriée de le faire, je l'apprécierais vraiment. Je n'ai rien trouvé de semblable à cet exemple sur Google. Merci

EDIT:

J'utilise 3 pinceaux globaux HBRUS A; HBRUS B; HBRUSH C;

et quand je les modifie, je dis toujours A = MakeBrush (NUM);

J'utilise les pinceaux correctement?

Était-ce utile?

La solution

Ma première hypothèse est que, si vous êtes un novice totalement en GDI / C ++, vous créez probablement beaucoup de stylos et de pinceaux. Ce sont des ressources contraintes dans Windows. Vous ne pouvez en créer qu'un nombre limité avant de commencer à taxer vos ressources. Vous pouvez donc utiliser vos pinceaux, vos stylos, vos fenêtres, etc. simultanément et les réutiliser, ou vous en débarrasser correctement lorsque vous avez terminé. Je recommande de vous procurer un exemplaire de "the Bible". ( http://www.amazon.com/Programming-Windows%C2%AE-Fifth -Microsoft / dp / 157231995X / ref = sr_1_1? Ie = UTF8 & livres = & qid = 1252788457 & amp; sr = 8-1 ) et en lisant les chapitres sur le dessin.

MODIFIER : vous ne semblez pas modifier correctement vos pinceaux, mais comme je ne vois pas le code de MakeBrush, je ne le sais pas. Vous créez probablement beaucoup de brosses dans les coulisses et vous ne le savez même pas. Sérieusement, obtenez un exemplaire du livre de Petzold et passez une heure ou deux. Vous finirez par avoir plus de cheveux sur la tête plus tard! ; -)

Autres conseils

Vous remarquerez que dans tous les exemples GDI, un objet 'CreatePen' ou 'CreateSolidBrush' sera suivi d'un objet delete. En effet, les ressources de Windows sont limitées et vous pouvez en manquer si vous ne les supprimez pas lorsque vous avez terminé.

PAINTSTRUCT Ps;
HDC hDC = BeginPaint(hWnd, &Ps);
HBRUSH NewBrush = CreateSolidBrush(RGB(250, 25, 5));

SelectObject(hDC, NewBrush);
Rectangle(hDC, 20, 20, 250, 125);
DeleteObject(NewBrush);
EndPaint(hWnd, &Ps);

Si vous oubliez d'inclure l'appel 'DeleteObject', vous aurez des problèmes après avoir utilisé tous les pinceaux disponibles. C’est vraiment amusant d’essayer =)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top