Ponto V!

Home C/C++ OpenGL Um ambiente para criar jogos com a SDL e a OpenGL
Vinícius Godoy de Mendonça
Um ambiente para criar jogos com a SDL e a OpenGLImprimir
Escrito por Vinícius Godoy de Mendonça

O passo inicial para qualquer desenvolvedor de jogos é escolher quais tecnologias usar e preparar um ambiente para elas. Para manipular o ambiente de janelas, carregar imagens do disco ou reproduzir sons, contaremos também com a ajuda da STL. Por fim, para desenhar em diversos exemplos, usaremos a OpenGL. Tudo isso será desenvolvido da IDE Code::Blocks, que é pequena e gratuita. Quando falamos em C++, preparar esse ambiente geralmente não é uma tarefa fácil. Esse tutorial visa explicar como cumpri-la, de maneira organizada e compreendendo cada passo da configuração.

Ao invés de OpenGL direto, você pode preferir criar um ambiente usando a Ogre no seu Code::Blocks. Nesse caso, recomendo que siga esse outro tutorial, falando sobre o assunto. A Ogre não será tratada nesse blog… pelo menos por enquanto!

Criando a pasta inicial

Muitas dores de cabeça são evitadas se você criar uma pasta para conter todo o seu ambiente do C++. Essa pasta deve ser criada preferencialmente na raiz do seu sistema de arquivos e conter um nome de apenas 8 letras, sem caracteres especiais. Por exemplo: D:\DevJogos

Dentro dessa pasta, crie também uma subpasta chamada dlls. Essa subpasta servirá para você colocar todas as bibliotecas (tais com a SDL) que devem ser acessadas para que o jogo rode. Um bom nome para ela seria: D:\DevJogos\Dlls

Adicionando um caminho ao path

Muitas pastas, como a pasta de dlls deverão ser adicionadas ao path. Por padrão, o Windows apenas procura por arquivos que estejam no mesmo diretório da aplicação sendo executada ou que estejam listados na variável de ambiente path. Muitos tutoriais de jogos, quando se deparam com uma dll, recomendam que você a jogue em pastas como windows\system32. Essa pasta já está no path de qualquer versão de windows. Entretanto, fazer isso não só misturará dlls secundárias com dlls do sistema operacional, como também reduz o nosso controle sobre o que tem ou não tem instalado. Por isso, vamos iniciar explicando como adicionar a sua própria pasta de dlls ao path.

Para acrescentar um diretório ao path, siga os passos abaixo:

  1. Abra as propriedades do sistema no painel de controle. A janela também pode ser aberta pressionando simultaneamente a tecla do windows e a tecla break;
  2. Clique na aba “Avançado” e em “Variáveis de Ambiente”;
  3. Na parte de baixo, procure a variável chamada Path:

    A variável de ambiente PATH

  4. Clique em editar. Adicione um ; e o seu diretório de dlls.

    Adicionando o diretório de dlls

Instalando o Code::Blocks

Podemos compilar os programas em C++ com um compilador padrão o GNU gratuito, que no caso do Windows é o MinGW. Na verdade, seria até possível escrever nossos próprios programas usando apenas o MinGW e o bloco de notas. Mas essa é uma tarefa tediosa e pouco produtiva. Para facilitar a edição de código, controlar automaticamente o make e ainda fornecer uma interface amigável com o depurador, vamos instalar o Code::Blocks. O Code::Blocks é uma IDE gratuita, leve e poderosa e tem versões para diversos sistemas operacionais.

Em alguns outros sites, você encontrará recomendações para instalar o DevCpp. Eu discordo radicalmente dessa opinião. O DevCpp é pobre em recursos, não tem boa integração com o depurador e faz uma verdadeira bagunça ao tentar alinhar o código.

O site oficial do Code::Blocks é http://www.codeblocks.org. Antes da versão 8.02, você era obrigado a instalar o Code::Blocks através de uma nightly build. Hoje, com a versão inicial, isso não é mais necessário. Também acompanham o compilador MinGW e o depurador Gdb na versão oficial, não sendo mais necessário baixa-los manualmente.

Para instalar faça o seguinte:

  1. Entre na página de downloads do Code::Blocks;
  2. Escolha o seu sistema operacional. No caso desse tutorial Windows 2000/XP/Vista;
  3. Iremos baixar o codeblocks-8.02mingw-setup.exe (19mb), escolha a opção Sourceforge ou BerliOS e aguarde o download.
  4. Rode o instalador, passe a tela do Welcome e concorde com a licença clicando em I Agree;
  5. Tomando o cuidado de clicar apenas no quadradinho com sinal de + ao lado de cada pasta, abra a pasta “Lexers” e a subpasta ScriptLanguages e selecione as linguagens Lua e Python, que também são interessantes para jogos;Scripts interessantes 
  6. Selecione a pasta Graphics Programming;
  7. Abra a pasta Contrib Plugins e selecione os plugins que você achar interessante. Eu gosto dos seguintes: Browse Tracker, Code Snippets, Code Stats, Copy Strings, Profiler, Exporter e o wxSmith. Se você era usuário do DevCpp, vai também gostar do DevPak plugin, que permite a instalação dos DevPaks diretamente.
  8. Clique em Next e selecione o caminho que ele será instalado. Como sugestão ponha na pasta que criamos acima, como D:\devjogos\codeblocks;
  9. Aguarde a instalação terminar e pronto!

Fazendo download da SDL

A SDL é uma biblioteca multi-plataforma, open source, para manipulação de janelas, vídeo, áudio, rede, threads e fontes. Ela facilita muito o desenvolvimento de jogos e fornece ótima integração com a OpenGL. Para instala-la, proceda da seguinte forma:

  1. Entre no site da SDL, e, na área Downloads da barra da esquerda, clique em SDL1.2;
  2. Nos arquivos citados em Development Libraries, selecione o arquivo da SDL para mingw. Por exemplo SDL-devel-1.2.14-mingw32.tag.gz;
  3. No seu diretório de jogos, crie uma pasta chamada libs e lá descompacte o SDL.
  4. Copie o arquivo sdl.dll da pasta bin para a sua pasta de dlls;
    Dica: Sempre que instalar uma nova biblioteca, copie o seu dll para a pasta de dlls. Isso evitará muitas dores de cabeça. Recomendo fazer uma cópia e não mover a dll, pois assim você ainda saberá que dll pertence a que biblioteca. Lembre-se, quando for criar um executável, será necessário anexar todas as dlls que ele utiliza antes de enviar para terceiros.
  5. Repita o mesmo processo para os pacotes SDL_Image e SDL_Mixer. Os sites oficiais desses pacotes podem ser encontrados na área doc wiki, ou clicando aqui e aqui. As distribuições foram feitas para visual C++ 8, mas funcionam bem no MinGW. O nome dos arquivos para baixar será: SDL_image-devel-1.2.10-VC8.zip e SDL_mixer-devel-1.2.11-VC8.zip (as versões podem mudar);

Configurando o Code::Blocks

Agora, veremos cada passo na configuração do Code::Blocks, com explicação sobre o que significam.

Criando um novo projeto

  1. Abra o Code::Blocks;
  2. Clique em File->New->project e selecione Console Application;
  3. Em Project Title, dê o nome do seu projeto. Em folder to create your project in, selecione a pasta project, criada no tutorial anterior.
    Pasta project
  4. Clique em next até finalizar o assistente;

Configurando o compilador

O compilador necessita de arquivos de cabeçalho, com a extensão .h, para saber quais funções estão disponíveis em sua aplicação. Isso vale tanto para os seus arquivos, que ficarão no seu projeto, quanto para arquivos de bibliotecas externas. É necessário indicar a ele onde ficam os arquivos .h de cada uma das bibliotecas externas usadas por você.

Sempre que você adicionar uma biblioteca ao seu projeto, é necessário seguir esses procedimentos. Abaixo, explicarei como fazer a configuração usando como exemplo a SDL:

  1. Para fazer isso, clique em Project->Build Options;
  2. Na árvore do lado esquerdo, clique na raiz (com o mesmo nome do projeto). Caso contrário, você estará definindo a biblioteca apenas para a compilação oficial (release) ou debug do seu projeto. Dessa forma, você define para as duas;
  3. Na guia Search Directories, selecione a opção compiler e clique em add.
  4. Selecione a pasta “include” de sua biblioteca. A SDL é uma exceção à regra. Ao invés da pasta include, devemos adicionar a pasta include\SDL. Exemplo:
    t6
  5. Responda sim a pergunta Keep This as a Relative Path?. Isso permite que você mova sua pasta DevJogos para diferentes unidades de disco (um pendrive, por exemplo); Você notará que o CodeBlocks adicionará o caminho relativo a biblioteca como: ..\..\SDL\SDL-1.2.14\include\SDL 
  6. Importante: Para incluir um cabeçalho da SDL, você terá que utilizar o comando #include “SDL.h” e não #include “SDL/SDL.h”; Isso porque já selecionamos a pasta SDL dentro do diretório include. Dessa forma, o código fica mais compatível com o Linux.

Configurando o Linker

A maior dificuldade de montar um ambiente está no linker. O linker precisa saber onde se encontram todos os arquivos .lib, o nome dessas bibliotecas, e quais bibliotecas padrão você está utilizando.

O caminho das libs

O primeiro passo é definir qual é o caminho onde suas bibliotecas se encontram. As bibliotecas são arquivos com nomes iniciados em lib e extensão .a, por exemplo, libSDL.a.

  1. Para fazer isso, clique em Project->Build Options;
  2. Novamente selecione a raiz da árvore situada no lado esquerdo da tela;
  3. Na guia Search Directories, selecione a opção linker e clique em add.
  4. Adicione a pasta lib de sua bibiloteca. No caso da SDL:
    Pasta lib da SDL
  5. Responda sim a pergunta Keep This as a Relative Path?.
  6. Clique na aba Linker Settings;

Linker settings

Você deve dizer ao linker quais são as bibliotecas que você está efetivamente utilizando. O maior problema aqui está em descobrir e indicar corretamente as bibliotecas padrão utilizadas, já que elas não aparecem em nenhum local óbvio. Geralmente, essas bibliotecas estão listadas na documentação dos componentes que você estiver instalando.

No caso da SDL e da OpenGL, fazemos o seguinte:

  1. Clique em Project->Build Options;
  2. Na guia Linker Settings;
  3. Clique em Add e digite mingw32 para adicionar a biblioteca padrão do mingw;
  4. Clique em Add e digite SDLmain para adicionar a biblioteca da SDL;
  5. Clique em Add e digite SDL.dll para adicionar a biblioteca de acesso a dll do SDL;
  6. Clique em Add e digite opengl32 para adicionar a biblioteca padrão da opengl;
  7. Clque em Add e digite glu32 para adicionar a biblioteca padrão OpenGL utilities;

Dica: Se você olhar a pasta lib das bibliotecas não padrão, verá os arquivos .a correspondentes da biblioteca. No caso da SDL, haverá dois arquivos chamados libSDLmain.a e libSDL.dll.a. Isso te dá a dica de que nomes inserir nas linker settings. Note que é necessário repetir esses mesmos procedimentos para as bibliotecas SDL_Mixer e SDL_Image, caso queira trabalhar com elas.

Ainda falta dizer ao linker que nós estamos lidando com uma aplicação para windows. Para isso, em other linker options, coloque a opção -mwindows. Ao final, sua tela deve ficar assim:

Configurações do linker

Com isso, finalizamos esse tutorial! No próximo artigo, vamos ver os primeiros passos para a construção de um jogo. Enquanto isso, se quiser ir brincando com a SDL, recomendo que siga esse ótimo tutorial (em inglês).

Atenção: Alguns usuários recortam e colam a palavra -mwindows desse tutorial, e o sinal de menos é substituído pelo travessão. Isso fará com que o Code::Blocks dê a mensagem: “mingw32-g++.exe: -mwindows: No such file or directory”. Para corrigir o problema, simplesmente apague esse parâmetro e digite-o novamente a mão.

Ajustando o caminho do compilador e do linker

Se você instalou o Code::Blocks pela primeira vez, esse passo não será necessário. Se, ao compilar, o seu Code::Blocks der a mensagem “uses an invalid compiler. Skipping…”, siga os passos desse tópico. Geralmente, numa instalação antiga, caminhos inválidos podem ter sido definidos e seu code::blocks ainda pode estar enxergando-os. Outra opção é seguir esses passos caso você tenha baixado o MinGW manualmente, e tenha optado por uma versão de Code::Blocks sem o compilador. Faça o seguinte:

  1. Clique em Settings, Compiler and debugger;
  2. Selecione a aba “Search directories” e na aba compiler, coloque o caminho correto da pasta include, que se encontra no mesmo diretório do seu compilador. Por exemplo: D:\DevJogos\CodeBlocks\MinGW\include
  3. Clique na aba linker e selecione o caminho correto da pasta lib, que se encontra no mesmo diretório do seu compilador. Por exemplo: D:\DevJogos\CodeBlocks\MinGW\lib
  4. Clique em Toolchain Executables e altere o “Compiler Instalador Directory” para o caminho certo do seu compilador. Normalmente basta pressionar o botão auto-detect para isso, mas, caso não funcione, selecione o diretório manualmente. A configuração deve ter ficado similar à abaixo:
    Configurando o caminho do compilador e do linker

Comentários (29)
  • Gustavo  - Excelente tutorial
    avatar

    Gostei muito do tutorial. Estava tendo muitos problemas com o caminho do compilador e do linker, mas com o tutorial esclareceu e facilitou tudo. Valew!!!

  • igor  - re: Excelente tutorial
    avatar

    View image :evil:

    Gustavo Escreveu:
    Gostei muito do tutorial. Estava tendo muitos problemas com o caminho do compilador e do linker, mas com o tutorial esclareceu e facilitou tudo. Valew!!!
  • Vinícius Godoy de Mendonça
    avatar

    Obrigado. Esse problema é mesmo um clássico.

  • Rafael  - Boa!
    avatar

    Otimo tutorial, coisa bem simples que todo mundo devia ler antes de sair por ai instalando quando IDE e configurando super mal.
    Obrigado!

  • Vinícius Godoy de Mendonça
    avatar

    Obrigado!

  • Washington
    avatar

    Muito bom o artigo,mas pretendo usar o MV C++ express você saberia onde posso encontrar um tutorial similar para o mesmo

  • Vinícius Godoy de Mendonça
    avatar

    Não muda praticamente nada.

    Inicialmente, crie um console application e selecione a opção "empty project". Em seguida, configure-o da seguinte forma:

    1. Baixe as libs da SDL para C++ Express;
    2. Configure os includes e libs nas propriedades do projeto, em VC++ Directories (includes em include directory e libs em library directories);
    3. Ainda nas propriedades do projeto, vá em linker->input. Em additional dependencies inclua o nome dos arquivos .lib que vai usar (exemplo: sdl.lib;sdlMain.lib;opengl32.lib;glu32.lib)
    4. No código, antes de fazer

    Código:
    #include <opengl.h>


    faça

    Código:
    #include <windows.h>

    Pronto. :)
    O resto da dicas de organização do ambiente permanecem as mesmas.

  • washington
    avatar

    Aki deu erro concerteza eu errei em algo
    1>------ Build started: Project: Aprendendo_OPENGL, Configuration: Debug Win32 ------
    1>MSVCRTD.lib(cinitexe.obj) : warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
    1>SDLmain.lib(SDL_win32_main.obj) : error LNK2019: unresolved external symbol _SDL_main referenced in function _main
    1>d:\meus documentos\documents\visual studio 2010\Projects\Aprendendo_OPENGL\Debug\Aprendendo_OPENG L.exe : fatal error LNK1120: 1 unresolved externals
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

  • Vinícius Godoy de Mendonça
    avatar

    Seu main está declarado como

    Código:
    int main(int argc, char* argv[])


    ?

    Com a SDL o main deve ter obrigatoriamente essa assinatura.

  • Washington
    avatar

    Se eu aperto F7 =
    ========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
    Se aperto F5 =
    'Aprendendo_opengl.exe': Loaded 'D:\Meus Documentos\Documents\Visual Studio 2010\Projects\Aprendendo_opengl\Debug\Aprendendo_openg l.exe', Symbols loaded.
    'Aprendendo_opengl.exe': Loaded 'C:\Windows\System32\ntdll.dll', Cannot find or open the PDB file
    'Aprendendo_opengl.exe': Loaded 'C:\Windows\System32\kernel32.dll', Cannot find or open the PDB file
    'Aprendendo_opengl.exe': Loaded 'C:\Windows\System32\KernelBase.dll', Cannot find or open the PDB file
    'Aprendendo_opengl.exe': Loaded 'C:\Program Files\Alwil Software\Avast5\snxhk.dll', Cannot find or open the PDB file
    The program '[4640] Aprendendo_opengl.exe: Native' has exited with code -1073741515 (0xc0000135).

  • Vinícius Godoy de Mendonça
    avatar

    Exatamente. Mas seu programa compilou e chegou até a executar, o que indica que o ambiente já está configurado e funcionando. :)

  • Anônimo
    avatar

    bom eu queria criar um jogo mais não consigo :dry: :?:

  • raianne  - Num sei
    avatar

    :dry: num to conseguindo criar um jogo.E ninguem sabe o q eu quero fazer mesmo assim num consigo.>>>>>>>>>>> :angry: :pinch: :pinch: :pinch: :pinch: :pinch:

  • Bruno Crivelari Sanches
    avatar

    Descrevendo o problema que você tem de forma objetiva fica mais simples alguém auxiliar. Agora apenas dizendo de forma abstrata que não consegue fica difícil imaginar qual seria o problema e a dificuldade.

  • Anônimo  - windows 7
    avatar

    C:\Dev-Cpp\bin\..\lib\gcc\mingw32\3.4.2 \..\..\..\..\mingw32\bin\ld.exe: cannot find -lSDLmain


    sabe que erro é esse?

  • Anônimo
    avatar

    obrigado

  • SlipiN
    avatar

    Seguinte:Em "Project" a opção "Build Options! não esta acessível para min(fica transparente ,e não da para clicar),dai eu não consigo configurar ele,alguem ai me ajuda!!!!!!! :S

  • Bruno Crivelari Sanches
    avatar

    Carregou ou criou um projeto? Muitas opções só aparecem com projetos carregados.

    T+

  • SlipiN
    avatar

    Ow,vlw cara ,brigadão ae,esse site é muito bom!!! :D

  • SlipiN
    avatar

    Tenho outra duvida,em uma parte do tutorial vcs dizem assim:Copie o arquivo sdl.dll da pasta bin para a sua pasta de dlls; Aonde que fica essa pasta Oo????

  • Vinícius Godoy de Mendonça
    avatar

    Se você está seguindo o tutorial desde o início, é a mesma pasta que você criou no passo "Criando a pasta inicial", e que você adicionou no path.

    Ela vai estar em DevJogos\Dlls

  • SlipiN
    avatar

    Vlw !!agora tah funcionando 100%

  • Alonso  - jogos
    avatar

    :cheer: sim

  • Alonso
    avatar

    CRIA UMA PASTA DE JOGOS NO MEU COMPUTADOR

  • Felipe
    avatar

    Legal, conheci o site através de um link no guj. Muito legal a iniciativa.

  • Luiz Paulo
    avatar

    Muito bom artigo, sempre foi uma dor de cabeça "colocar as coisas pra funcionar" :P

    Só uma duvida, conhece a biblioteca SFML? (Simple and Fast Multimedia Library)

    Tava dando uma pesquisada e ela parece ser mais "apropriada" para jogos indie do que a SDL. Se bem que posso tar falando bobagem, por isso que queria saber sua opinião.

    Abraço

  • Vinícius Godoy de Mendonça
    avatar

    Nunca tinha ouvido falar. Vou dar uma olhada, parece bem legal.

Escrever um comentário
Your Contact Details:
Gravatar enabled
Comentário:
[b] [i] [u] [url] [quote] [code] [img]   
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch::(:shock:
:X:side::):P:unsure::woohoo::huh::whistle:;):S:!::?::idea::arrow:
Security
Por favor coloque o código anti-spam que você lê na imagem.
LAST_UPDATED2  

Busca

Linguagens

Twitter