Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Programação Gráfica em C - Parte 1: Instalando bibliotecas SDL e utilizando a Chien2dLite, Notas de estudo de Administração Empresarial

Este documento fornece instruções para instalar as bibliotecas sdl no devc++ e utilizar a biblioteca chien2dlite para carregar imagens e sprites em um projeto de programação gráfica em c. O documento aborda a instalação das bibliotecas sdl, a criação de um novo projeto no devc++ e a adição de arquivos necessários. Além disso, é discutido o uso da biblioteca chien2dlite para carregar imagens e sprites, além de explicar como desenhá-los na tela.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 16/02/2009

1-yuv
1-yuv 🇧🇷

1 documento

1 / 56

Documentos relacionados


Pré-visualização parcial do texto

Baixe Programação Gráfica em C - Parte 1: Instalando bibliotecas SDL e utilizando a Chien2dLite e outras Notas de estudo em PDF para Administração Empresarial, somente na Docsity! Programação Gráfica – Parte 1 Versão em C – 2006 – PUCPR – Tutoria de Jogos – 1º Ano Paulo V. W. Radtke pvwradtke@gmail.com http://www.ppgia.pucpr.br/~radtke/jogos/ PUCPR - CCET 2 AVISO IMPORTANTE!! Esta versão é dedicada exclusivamente para os cursos de Ciência da Computação e Engenharia da Computação. Para a versão de Sistemas de Informação, utilizando Java, pegue o arquivo correspondente e participe da aula no horário adequado. PUCPR - CCET 5 SDL Para facilitar a instalação, foi criado um pacote, disponibilizado na página da tutoria: pacote-dev-cpp.zip. Este arquivo deve ser descompactado no diretório aonde se encontra instalado o Dev- C++. Ex: Se ele se encontra instalado em C:\Dev- Cpp, o mesmo deve ser descompactado em C:\, a raiz do drive. PUCPR - CCET 6 SDL Além disto, é possível fazer o download dos pacotes diretamente do site da SDL: http://www.libsdl.org Como toda biblioteca compartilhada, a DLL possui um grupo de arquivos que devem ser colocados no diretório System do Windows ou distribuídos junto com a aplicação. PUCPR - CCET 7 SDL Como não temos permissão de escrita no diretório System, utilizaremos a segunda opção. Apesar de aparentemente mais desvantajosa, esta abordagem é mais prática do ponto de vista de distribuição. PUCPR - CCET 10 Chien2DLite Limitações: Adaptada a partir de uma versão OpenGL, a biblioteca somente carrega imagens quadradas, com tamanhos potência de 2. Ex: 8x8, 16x16, 32x32, 64x64, 128x128, 256x256, 512x512, 1024x1024, etc. A biblioteca somente desenha blocos (azulejos, do inglês tiles), não dando suporte a imagens. PUCPR - CCET 11 Chien2DLite A primeira versão básica não possui primitivas 2D tradicionais. Será implementado para as próximas aulas o suporte a desenho de pontos, retas e retângulos. PUCPR - CCET 12 Projeto no Dev-C++ Para fazermos qualquer coisa com a biblioteca, devemos criar um projeto no Dev- C++. O primeiro passo é criar um diretório e extrair nele os arquivos da Chien2DLite. O arquivo exemplo01-c-imagem.zip será utilizado neste exemplo (o arquivo contém a biblioteca Chien2DLite). PUCPR - CCET 15 Projeto no Dev-C++ Em seguida, adicione os arquivos do exemplo clicando com o botão direito do mouse no nome do projeto: PUCPR - CCET 16 Projeto no Dev-C++ Uma vez inclusos os arquivos, temos a seguinte listagem: Obs: os arquivos da Chien2DMappy, responsável pelos mapas estão inclusos mas não serão utilizados neste exemplo. A sua inclusão no projeto não faz diferença. PUCPR - CCET 17 Projeto no Dev-C++ Se compilarmos o projeto como está, o mesmo não funcionará. É preciso indicar ao compilador quais bibliotecas ligar ao executável com o linker em Project -> Project Options. PUCPR - CCET 20 Projeto no Dev-C++ Uma vez colocados os parâmetros, o programa compilará e o executável será gerado. Ao executar o mesmo funciona. Só que por enquanto, o programa só exibe uma tela preta. Para encerrar o programa, pressione ESC ou feche a janela. PUCPR - CCET 21 Explicação do Código Fonte Vamos nos concentrar na função main, ignorando (por enquanto), a função entrada, responsável pelo polling do teclado. A funcionalidade básica da biblioteca é simples, apenas 6 funções resolvem a parte de inicialização, encerramento e redesenho de tela. PUCPR - CCET 22 Explicação do Código Fonte Chien2DLite *video = Chien2DLite::pegaInstancia(); Aqui criamos uma referência ao objeto da Chien2DLite (um ponteiro). O objeto deve ser recuperado SEMPRE através deste método estático. Este método é acessível de qualquer ponto do programa. PUCPR - CCET 25 Explicação do Código Fonte video->inicia(largura, altura, modo, retraço, titulo); Modo indica se a tela vai ser em modo janela ou tela cheia. Valores possíveis (valores constantes em Chien2DLite.h): Chien2DLite::janela Chien2DLite::telaCheia PUCPR - CCET 26 Explicação do Código Fonte video->inicia(largura, altura, modo, retraço, titulo); Valor booleano indicando se a aplicação deve ou não esperar o retraço. Em modo janela ele é ignorado, já em tela cheia ele é implementado em conjunto com double buffer. Valores possíveis: true e false. PUCPR - CCET 27 Explicação do Código Fonte video->inicia(largura, altura, modo, retraço, titulo); String indicando o nome da aplicação. Qualquer valor string válido (entre aspas) é aceito. PUCPR - CCET 30 Explicação do Código Fonte video->encerra(); A função encerra fecha a janela e remove os recursos alocados PELA Chien2DLite. Recursos alocados com funções SDL devem ser removidos manualmente. PUCPR - CCET 31 Explicação do Código Fonte Chien2D::removeInstancia(); Finalmente, a função removeInstancia remove a instancia da classe da memória. Como boa prática de pogramação, é interessante chamar essa função no final dos seus programas. PUCPR - CCET 32 Carregando uma Imagem Imagens na SDL são do tipo SDL_Surface. Este tipo é uma estrutura que é alocada quando a imagem é criada/alocada. Para usarmos uma imagem do disco, devemos criar um ponteiro para uma surface: SDL_Surface *imagem; PUCPR - CCET 35 Carregando uma Imagem Ao carregar a imagem pode ocorrer um erro. Caso a imagem não exista ou não haja mais espaço em memória, a surface retornada é nula (NULL, 0). Em geral, é interessante testar esta condição para não usar um ponteiro nulo. PUCPR - CCET 36 Carregando uma Imagem Pesquisa adicional na documentação da SDL: Normalmente, surfaces criadas de diferentes fontes não tem o mesmo formato que o display de vídeo. Para acelerar o processo de redesenho, devemos converter as imagens para o formato do display. Pesquise na documentação da SDL como fazer isto. PUCPR - CCET 37 Desenhando a Imagem Para desenharmos diretamente na tela enquanto usamos a Chien2DLite, precisamos pegar a surface do display do sistema. Para isto, usamos a função: SDL_GetVideoSurface(); A função retorna o ponteiro da surface associada ao display do sistema. PUCPR - CCET 40 Desenhando a Imagem Uso típico: SDL_BlitSurface(imagem, 0, display, 0); Copia a surface imagem (inteira) para a surface display (inteira), a partir das coordenadas (0,0). PUCPR - CCET 41 Desenhando a Imagem A função SDL_BlitSurface serve para outras situações. Podemos inclusive copiar um pedaço da surface de origem em um pedaço da surface de destino. Caso você tenha maior interesse nesta função, consulte a documentação da SDL (online ou faça o download). PUCPR - CCET 42 Eliminando a Imagem Uma surface criada na SDL ocupa memória alocada dinamicamente. Esta memória DEVE ser liberada quando ela não for mais ser utilizada. Assim, antes de encerrar o programa, devemos eliminar a imagem: SDL_FreeSurface(imagem); PUCPR - CCET 45 Carregando Sprites (Azulejos) unsigned int carregaAzulejo(string arquivo, string apelido, int tipoAzulejo); Arquivo indica o nome do arquivo a ler do disco. PUCPR - CCET 46 Carregando Sprites (Azulejos) unsigned int carregaAzulejo(string arquivo, string apelido, int tipoAzulejo); Apelido indica o nome pelo qual o azulejo será chamado no sistema. PUCPR - CCET 47 Carregando Sprites (Azulejos) unsigned int carregaAzulejo(string arquivo, string apelido, int tipoAzulejo); tipoAzulejo indica o tamanho do bloco: Chien2DLite::azulejo8 Chien2DLite::azulejo16 Chien2DLite::azulejo32 Chien2DLite::azulejo64 PUCPR - CCET 50 Carregando Sprites Uso típico: unsigned int sprite = video-> carregaAzulejo(“imagem.png", “apelido", Chien2DLite::azulejo32); PUCPR - CCET 51 Mostrando o Sprite O azulejo é um tile set, ou seja, ele pode conter vários blocos dentro dele. Para desenharmos um sprite precisamos do identificado do sprite, o índice dentro do tile set e da posição x e y: bool desenhaAzulejo(unsigned int identificador, unsigned int indice, int x, int y); PUCPR - CCET 52 Mostrando o Sprite Uso típico: video->desenhaAzulejo(sprite, 0, 30,224); PUCPR - CCET 55 Desafio Modifique o programa para desenhar mais de um sprite na tela. Depois, experimente fazer um sprite atravessar a tela. Para ficar mais interessante, faça o sprite ir e vir de um canto a outro da tela. PUCPR - CCET 56 Próxima Aula Desenhando um Tilemap Desenhando Fontes Tratando a Entrada
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved