Domanda

Sono un po 'nuovo in c ++ e sto cercando di creare un gioco. Ho un array 2d RECT_GRID di rettangoli. Ho una griglia 2d GRID di short senza segno. Riempo l'array di rettangoli durante WM_CREATE

L'evento WM_PAINT dipinge rettangoli per tutti gli elementi dell'array. Il colore del rettangolo si basa sul valore di GRID [x] [y]

L'ho fatto così quando si preme il tasto Giù, cambia il colore di uno dei rettangoli impostando GRID [1] [XMOVE] = su un colore diverso quindi invalida il rettangolo client

Fondamentalmente quello che succede è che funziona bene per un po ', ma alla fine smette di disegnare cose. Ho controllato la mia variabile XMOVE durante il debug, ho controllato i valori e le cose della griglia e tutto è a posto. Quando rimuovo il ciclo for dall'evento paint e mi concentro su 1 rettangolo specifico, non fallisce mai, ma se provo a ridisegnarli tutti in una volta, dopo circa 20 volte, smette di dipingere le cose. Cosa potrebbe causare questo? Sono nuovo di c ++ e scommetto che non sto dipingendo correttamente e causando un overflow o qualcosa del genere.

Se qualcuno potesse spiegare cosa non va, o un modo corretto per farlo, lo apprezzerei davvero. Non sono riuscito a trovare nulla di simile a questo esempio su Google. Grazie

EDIT:

Sto usando 3 pennelli globali HBRUSH A; HBRUSH B; HBRUSH C;

e quando li modifico, dico sempre A = MakeBrush (NUM);

ami sto usando correttamente i pennelli?

È stato utile?

Soluzione

La mia prima ipotesi, se sei un principiante GDI / C ++ totale, è che probabilmente stai creando molte penne e pennelli. Queste sono risorse limitate in Windows. Puoi crearne tanti solo prima di iniziare a tassare le tue risorse. Quindi crea i tuoi pennelli, penne e finestre, ecc. Tutti in una volta e riutilizzali, oppure smaltiscili correttamente quando hai finito. Consiglio di ottenere una copia di " the Bible " ( http://www.amazon.com/Programming-Windows%C2%AE-Fifth -Microsoft / dp / 157231995X / ref = sr_1_1? Ie = UTF8 & amp; s = books & amp; qid = 1252788457 & amp; sr = 8-1 ) e leggere i capitoli lì sul disegno.

MODIFICA : non sembra che tu stia modificando correttamente i tuoi pennelli, ma poiché non riesco a vedere il codice per MakeBrush, non lo so. Probabilmente stai creando molti pennelli dietro le quinte e non lo sai nemmeno. Seriamente, prendi una copia del libro di Petzold e passa un'ora o due. Finirai con più capelli in testa più tardi! ; -)

Altri suggerimenti

Noterai in tutti gli esempi GDI, un 'CreatePen' o 'CreateSolidBrush' sarà seguito da un oggetto delete. Questo perché sono risorse limitate in Windows e puoi esaurirle se non le elimini al termine.

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

Se si dimentica di includere la chiamata 'DeleteObject', si avranno problemi dopo aver esaurito tutti i pennelli disponibili. In realtà è divertente provare =)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top