Curso completo de DarkGdk
Gameprog - Escola de programação de jogos digitais
Contato: gameprog.br@gmail.com
Fase 5.3

index << >>



05.3 Desenho 2D

05.2 Visão geral

Nesta seção vamos aprender a usar as funções que desenham caixas, círculos,
elipses e demais funções básicas de desenho 2D.
 
 Testando funções de bitmap
 
// desenho2d01.cpp // Esse programa testa funções de desenho 2d #include "DarkGDK.h" void initsys(); // inicializa o sistema void tst_desenho2d(); // Testa funções 2d // Cores const int nPreto = 0; const int nBranco = 0xFFFFFF; // ---------------------------------------------------------------------------- void DarkGDK ( void ) { // Começo da aplicação DarkGdk initsys(); while ( LoopGDK ( ) ) { tst_desenho2d(); dbSync ( ); } // fim do while return; } // fim da função: DarkGDK // ---------------------------------------------------------------------------- void initsys() { // Esta função inicializa o sistema dbSyncOn( ); dbSyncRate (60); dbCLS(nBranco); dbSetWindowTitle("desenho2d01.cpp"); } // fim da função: initsys() // ---------------------------------------------------------------------------- void tst_desenho2d() { // variáveis de trabalho char txt[255]; int cor, r, g, b; int x = 371, y = 21; // Elenco de cores básicas int nAzul = dbRGB(0,0,255); int nVerde = dbRGB(0,255,0); int nVermelho = dbRGB(255,0,0); int nMagenta = dbRGB(255,0,255); dbInk(nPreto, nBranco); // Desenha olho com linha preta e fundo branco dbCircle(160,120,80); dbCircle(160,120,30); dbEllipse (160,120,160,80); dbLine (0,120,320,120); // Desenha um pontinho no olho dbDot(150,110); dbDot(151,110); dbDot(150,111); dbDot(151,111); // Desenha sobrancelha azul dbInk(nAzul, nBranco); dbBox (10,10,320,30); // Desenha caixa multicolorida dbBox (370,20, 470,250, nAzul, nVerde, nVermelho, nMagenta); // Verificação de cor de determinado ponto (x,y); cor = dbPoint (x, y); r = dbRGBR(cor); g = dbRGBG(cor); b = dbRGBB(cor); sprintf (txt, "Cor no ponto (%d,%d): (%d, %d, %d)", x, y, r, g, b); // Sinaliza o ponto verificado dbCircle (x,y,20); dbCircle (x,y,10); dbLine (x,y,250,230); dbText (20,230, txt); } // fim tst_desenho2d()
Desenhando pontos // Desenha um pontinho no olho dbDot(150,110); dbDot(151,110); dbDot(150,111); dbDot(151,111); A função dbDot() desenha um ponto na coordenada (x,y) especificada. A cor do ponto é dada pela função dbInk(), isso vale para as demais funções 2D incluindo funções de texto. Desenhando quadrados e retângulos // Desenha sobrancelha azul dbInk(nAzul, nBranco); dbBox (10,10,320,30); dbBox (nEsquerda,nTopo,nDireita,nFundo); A função dbBox() desenha uma caixa a partir das coordenadas especificadas: (nEsquerda, nTopo) - ponto inicial da caixa (nDireita, nFundo) - ponto final da caixa Desenhando uma caixa multicolorida // Desenha caixa multicolorida // Elenco de cores básicas int nAzul = dbRGB(0,0,255); int nVerde = dbRGB(0,255,0); int nVermelho = dbRGB(255,0,0); int nMagenta = dbRGB(255,0,255); dbBox (370,20, 470,250, nAzul, nVerde, nVermelho, nMagenta); A função dbBox() tem uma segunda sintaxe que permite desenhar uma caixa multicolorida. Basta você incluir no conjunto de argumentos 4 números inteiros que representam cores. Desenhando círculos dbCircle(160,120,80); dbCircle(xpos,ypos,nraio); A função dbCircle() desenha um círculo na posição especificada (xpos, ypos) com um raio do tamanho nraio. Elipses dbEllipse (160,120,160,80); dbEllipse (xpos,ypos,xraio,yraio); A função dbEllipse() desenha uma elipse na posição especificada pela coordenada (xpos, ypos). O largura ou raio horizontal é definido por xraio, e a altura ou raio vertical é definido por yraio. Manipulando cores dentro do padrão RGB int nVermelho = dbRGB(255,0,0); // (R) red int nVerde = dbRGB(0,255,0); // (G) green int nAzul = dbRGB(0,0,255); // (B) blue A cor é representada por um número inteiro de 24 bits cuja faixa de valor varia de 0 a 16.777.216; a função dbRGB(nRed, nGreen, nBlue) combina as taxas de vermelho, verde e azul passadas como argumentos e retorna um valor integral de 24 bits. Existe a necessidade contrária de a partir desse número integral obter isoladamente as taxas de vermelho, verde e azul. Isso é obtido através das funções abaixo: nVermelho = dbRGBR(nCor); // Obtém a taxa de vermelho nVerde = dbRGBG(nCor); // Obtém a taxa de verde nAzul = dbRGBB(nCor); // Obtém a taxa de azul. Lembramos que a faixa limite de valor das taxas é um número de 8 bits e vai de 0 a 255. Descobrindo a cor de um ponto na tela ou imagem // Verificação de cor de determinado ponto (x,y); cor = dbPoint (x, y); r = dbRGBR(cor); g = dbRGBG(cor); b = dbRGBB(cor); sprintf (txt, "Cor no ponto (%d,%d): (%d, %d, %d)", x, y, r, g, b); // Sinaliza o ponto verificado dbCircle (x,y,20); dbCircle (x,y,10); dbLine (x,y,250,230); dbText (20,230, txt); A função dbPoint() retorna um valor inteiro de 24 bits correspondente ao ponto da posição especificada (x,y). É uma função interessante porque com ela você pode realizar uma verificação de colisão baseado na cor encontrada, por exemplo, se seu jogador tropeçou numa mancha verde ele perde energia por expor-se a material radioativo. Outro recurso valioso que pode ser implementando usando dbPoint() é o escaneamento da tela ou de um bitmap para copiá-lo para outra parte ou gravá-lo em arquivo.
// Sinaliza o ponto verificado dbCircle (x,y,20); dbCircle (x,y,10); Sinalize os pontos para desenhar linhas, quadrados, textos com círculos. Isso permite a assimilação rápida dos melhores ajustes para o posicionamento final dos seus objetos.

index << >>


Produzido por Gameprog: Jair Pereira - Setembro/2013 © gameprog.br@gmail.com http://www.gameprog.com.br http://www.nucleoararat.com.br