No post anterior havia explicado como desenhar um pequeno quadrado no ecrã e como proceder ao movimento deste mesmo quadrado pela área do ecrã usando as teclas do teclado.
Hoje explico como fazer o upload de uma imagem e como é possível movimentar a imagem da mesma forma que movimentei o quadrado.
Aqui fica o código devidamente comentado para melhor compreensão:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
//Include da Biblioteca SDL, Funcoes e tipos de dados #include <sdl /SDL.h> int main(int argc, char** argv) { //Inicializacao do SDL SDL_Init(SDL_INIT_EVERYTHING); //Definição do Ecra SDL_Surface *screen = NULL; screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); //Upload de imagens para memória SDL_Surface *image = NULL; //definição da variável de load da imagem image = SDL_LoadBMP("Idle.bmp"); //Boleano para o teste de execucao bool running = true; //4 direcções bool b[4] = {0, 0, 0, 0}; //Definicao dos controladores de FPS const int FPS = 30; Uint32 start; //Definicao dos pontos e da recta para desenho do quadrado no ecra SDL_Rect rect; rect.x = 0; //ponto de partida da imagem rect.y = 0; //ponto de partida da imagem rect.w = 640; //alcance no eixo do x da imagem rect.h = 480; //alcance no eixo do y da imagem //Definicao das cores a usar quer em background quer no quadrado desenhado Uint32 color = SDL_MapRGB(screen->format, 0xff,0xff,0xff); // cor branca background //teste de verificacao da execução while(running) { start = SDL_GetTicks(); SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { //caso escolha sair (x) termina a execuçao case SDL_QUIT: running = false; break; //caso Tecla Esteja pressionada case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_DOWN: //Cima b[0] = 1; break; case SDLK_RIGHT: //Direita b[1] = 1; break; case SDLK_UP: //Baixo b[2] = 1; break; case SDLK_LEFT: //Esquerda b[3] = 1; break; } break; //caso Tecla Não Esteja pressionada case SDL_KEYUP: switch(event.key.keysym.sym) { case SDLK_DOWN: //Cima b[0] = 0; break; case SDLK_RIGHT: //Direita b[1] = 0; break; case SDLK_UP: //Baixo b[2] = 0; break; case SDLK_LEFT: //Esquerda b[3] = 0; break; } break; } } //case UP pressionado decrementa 1 a Y if(b[0]) rect.y--; //Caso LEFT pressionado decremetna 1 a X if(b[1]) rect.x--; //case Down pressionado incrementa 1 a Y if(b[2]) rect.y++; //Caso RIGHT pressionado incremetna 1 a X if(b[3]) rect.x++; //Desenhar o background SDL_FillRect(screen, &screen->clip_rect, color); //Desenhar a Imagem no Ecrã SDL_BlitSurface(image, &rect, screen, NULL); // os argumentos começam pela imagem = image, pela sua orientação no ecrã = &rect e screen indica onde será apresentada //Update Screen SDL_Flip(screen); if(1000/FPS > SDL_GetTicks()-start) { SDL_Delay(1000/FPS-(SDL_GetTicks()-start)); } } //Libertar a imagem da memória SDL_FreeSurface(image); //Quit SDL SDL_Quit(); return 0; }</sdl> |
Neste exemplo explico como fazer o upload de um bipmat pelo que usando o SDL se torna mais simples fazer o upload de imagens neste formato, no entanto existem formas de fazer upload de imagens nos formatos mais conhecidos, mas para isso será necessário incluir a biblioteca #SDL_image.
Share