
Vamos obter informações iniciais do que é necessário para aprender, o que iremos aprender e como iremos aprender a desenvolver 5 games com C++ e SFML além de obtermos lógica e compreensão de todo o passo à passo necessário para desenvolvermos nossos games.
Simple and Fast Multimedia Library (SFML) é uma biblioteca multiplataforma, orientada a objetos e livre. Foi escrita em C++ por Laurent Gomila, que tem como objetivo fornecer uma interface simples para vários componentes multimédia do computador.
Baixe a versão 2.6.2 de acordo com a versão do seu Visual Studio em: https://www.sfml-dev.org/download/sfml/2.6.2/
Nesse vídeo vamos exibir falar sobre todas as formas possíveis de instalação e/ou construção do SFML no seu computador/sistema . São dois blocos que mostrar como fazer no Linux e também no Windows .
Nesse capítulo vamos conhecer conceitos básicos para podermos evoluir de maneira sensata.
Como podemos notar no exemplo anterior, alguns conceitos são básicos de todo o código SFML, para isso vamos ver de maneira detalhada os essenciais.
Vimos no exemplo inicial que podemos desenhar um círculo, mas não somente um círculo, mas também diversas outras formas como um retângulo e teremos mais detalhes de como tudo isso funciona.
Para desenhar um texto numa janela precisaremos usar fontes para textos, mas o SFML não obtém a fonte do seu sistema dinamicamente, então veremos como adicionar as fontes e também os textos nesse capítulo.
Nesse capítulo veremos com detalhes como usar imagens e sprites e além de um tutorial de como criar uma movimentação de uma bola em um campo de futebol de forma ilustrativa.
Essa ideia de game eu vi em algum lugar na internet de forma bem básica ei pensei:
- Nossa! Esse game seria uma boa ideia para didática inicial!
Já veio em minha mente todas as ideias de melhorias. Então, pensei em tanta coisa que a ideia já está muito diferente do que eu vi, pois incrementei algumas coisas que ajudarão o entendimento de muitos conceitos iniciais que considero importantes.
Resume-se em tijolos, terrenos,... quadrados do Minecraft descendo e a gente com um martelo tentando destruir os tijolos, por isso nomeei de Minecrap .
Vamos reforçar nosso forma de fazer verificação de limites da janela e como utilizar objetos de forma randômica.
Vamos implementar recursos que vimos de forma prática e funcional como: utilizar fontes e pontuação.
Nesse vídeo vamos ver como usar as imagens em vez de retângulos e obtermos o mesmo resultado, além de dicas de tratamento de janela.
Nesse vídeo vamos adicionar imagem estática e utilizar fontes para informação de dados.
Vamos saber como substituir o cursor do mouse de forma correta e tratar falhas que podem ser exploradas pelo jogador .
Vamos descobrir como funciona a técnica de criar um game over para nosso game e reiniciar o game após esse recurso .
Nesse vídeo vamos conhecer a mágica de pausar um game de forma correta e funcional.
Vamos adicionar música e sound FX utilizando buffer de maneira organizada.
Nesse vídeo vamos transformar tudo que fizemos de forma procedural para classes para melhorar a visibilidade, escalabilidade e desempenho do Minecrap.
Vamos desenvolver nossa classe, declarar e inicializar os membros e as funções membro no construtor e desenhamos a grade na janela .
Vamos finalizar nosso game com dicas de lógicas e exercícios propostos .
Vamos saber como obter recursos e iniciar a primeira parte da lógica do nosso game.
Vamos ver como alterar alguns recursos e como funciona a lógica de disparo .
Utilizando vector para os bullets e adicionando fundo .
Criando inimigos de forma randômica e colisões com o mesmo .
Primeiros passos com Sprites Sheets e como alterar partes dele de acordo com pontuação do game.
Vamos descobrir como criar animação de frames com sprite sheet e finalizar nosso game. Todo código final disponível para download .
Criamos o ground e posicionamos o personagem ao mesmo .
Adicionamos fundo e movimento com frames para esquerda e para direita .
Veremos como adicionar pulo de forma mais realista, além de outras dicas.
Melhorando a lógica gravitacional do pulo com uso em uma classe separada .
Vamos aprender de forma didática como desenhar mapas para nosso game.
Como utilizar um recurso fácil para criarmos as colisões de maneira funcional.
Como adicionar câmera com offset para percorrermos o mapa do nosso game.
Vermos mais recursos além de dicas de instalação e inicial utilização do software: Map Editor para desenvolvermos nossos mapas de forma mais fácil. Código final disponível para download com Git também .
Para quem já trabalha com desenvolvimento avançado de sistemas deve conhecer o modelo MVC que significa: Model View Controller que é uma forma de separar os dados para o banco de dados(Model), os dados que serão manipulados(Controller) e os dados que serão vistos(Views).
O ECS(Entity Component System ) é similar ao MVC, ou seja, é um padrão de arquitetura de software, mas é utilizado mais comumente para desenvolvimento de games. Em português, ECS significa: Sistema de Componente e Entidade . Um ECS segue o princípio da "composição ao invés de herança" . Em resumo, um ECS consegue separar dados e lógica para que sejam mais fáceis de manipularmos .
Nesse vídeo analisamos um game que desenvolvi com estrutura ECS utilizando um framework da internet onde os links e todo o código está disponível para download nesse capítulo.
Nesse vídeo criamos um arquivo CMakeLists.txt eexplicamos cada linha e como modificar, construir, instalar e desinstalar com CMake e GNU Make .
Faça o download do .bat nesse capítulo (Observação, nesse arquivo já está com as cores corrigidas).
Compacte o diretório do 08-minecrap e leve para o Windows salvando em um pendrive, pela internet, ... a melhor forma para você.
No Windows, descompacte em Extrair aqui.
Crie um novo projeto vazio no Visual Studio, escolha o diretório onde ficará seu projeto, escolha o nome do seu game, ex.: Minecrap.
Altere de x86 para x64
Clique com o botão direito em Arquivos de Recursos(Adicionar > Novo Item) ao lado direito da tela e crie um arquivo de tipo *.cpp de nome: main.cpp
Copie o código de main.cpp do 08-minecrap para esse main.cpp, crie também os arquivos minecrap.hpp e minecrap.cpp em Arquivos de Recursos e copie o código dos originais e cole nos respectivos arquivos. Copie também os assets.
Agora vamos fazer o mesmo processo que fizemos no início para podermos compilar:
7.1. Projeto > Propriedades de Minecrap > Configuração Debug > C/C++ > Geral > Diretórios de Inclusão Adicionais > Adicionar > Editar > Novo Intem > C:\SFML-2.5.1\include > OK > Aplicar .
7.2. Vinculador > Geral > Diretórios de Biblioteca Adicionais > Editar > Novo Item > C:\SFML-2.5.1\lib
7.3. Vinculador > Entrada > editar > Novo item:
sfml-graphics-d.lib
sfml-window-d.lib
sfml-system-d.lib
sfml-audio-d.lib
Ok > Aplicar
7.4. Copiar todas as .dll em bin do SFML e colar dentro do seu projeto, nesse caso: Minecrap\Minecrap
Edite os arquivos se você usou std::experimental, assim:
Remova:
#include <experimental/random>
Troque:
x = static_cast<float>(std::experimental::randint(10, (int)(window.getSize().x - texture.getSize().x - 10)));
Por:
x = static_cast<float>(std::rand() % (10, (int)(window.getSize().x - texture.getSize().x - 10)));
Construa o Minecrap versão Debug para ver se está tudo certo: > Depurador Local do Windows. (Teste pause, ENTER, Esc, F1, sons,... e a jogabilidade em si)
Depois de tudo certo na versão Debug, vamos criar o release. Para isso já altere na Barra de Ferramentas de Debug para Release e depois vá até Propriedades do Minecrap novamente e check se em: Configuração está também em Release, se não estiver, altere.
Preencha tudo que fizemos anteriormente, só um detalhe para os nomes são sem o '-d' no final. Depois de tudo certo: Depurador Local do Windows .
Agora note que em seu projeto além da pasta x64/Debug, fora do seu projeto, também há: x64\Release, e note que há um .exe, se não houver: Crie em: Compilação > Compilação Solução .
Se fecharmos o Visual Studio e tentar executar esse .exe de Realease não conseguiremos. Então, vá de novo para 'Minecrap\Minecrap' e copie todas as .dll e a pasta assets/ e cole dentro de Realease junto com o .exe . Depois tente executar e veja que funcionará!
Para otimizar, execute o game e enquanto ele estiver rodando(mesmo em game over), tente deletar os arquivos e ignore(todos) que não puder deletar. Ficará somente os necessários para seu game. Após remover, execute de novo para testar.
Pronto, copie essa pasta Realease para outro lugar e renomei para o nome do seu game e compacte para disponibilizar da forma que preferir.
Dica: Essa versão pode ser disponibilizada em Releases do GitHub e você pode orientar ao usuário baixar, descompactando em C:\Arquivo de Programas e criar um atalho na área de trabalho, veja! Você ainda pode adicionar ícone e/ou criar um .bat para instalar tudo!
Deploy no Linux(GitHub e AppImage)
O deploy no GNU/Linux praticamente foi descrito com CMake, mas caso você não queira disponibilizar o código fonte, somente o binário, você terá no mínimo de criar um Makefile como nós utilizamos durante e copiar os Resources e o binários para os devidos diretórios, adicionando a linha de cópia ao Makefile e orientar o usuário a rodar: o make install .
Mas assim como no Windows existe um binário empacotado com os Resources dentro (portable) no Linux existe o AppImage.
Note que o a.out do Gentoo não vai funcionar aqui. As versões dos programas no Gentoo são sempre mais modernas, então vamos tentar rodar, ver a versão da GNU GLibc e recompilar para usarmos o correto. Vamos também modificar o fonte para obter os arquivos dinamicos .
Mas antes teste, removendo o SFML do seu sistema e de preferência em outros sistemas/distros . Lembrando que a versão da GNU GLibc influencia muito, rode: ldd --version para informar aos usuários a versão da GLibc que ele deve ter .
Vamos conhecer formas de divulgar e lucrar com nossos games. Além de dicas de bibliotecas.
Nesse capítulos iremos aprender como Recriar o: Jogo do Dinossauro do Google Chrome. Esse jogo, apesar de parecer simples, possui diversos detalhes que ao praticá-los, avançaremos ainda mais em nosso conhecimento em desenvolvimento de jogos.
Nesse vídeo mostramos todas as novidades do SFML 3 bem como instalar e utilizar no Windows e no Ubuntu.
Notas do lançamento: https://github.com/SFML/SFML/releases/tag/3.0.0
Simple and Fast Multimedia Library (SFML) é uma biblioteca multiplataforma, orientada a objetos e livre. Foi escrita em C++ por Laurent Gomila, que tem como objetivo fornecer uma interface simples para vários componentes multimédia do computador.
A biblioteca lida com criação de janelas, gestão do input assim como manutenção e criação dos contextos de OpenGL. Também fornece um módulo para renderização de gráficos em 2D, acelerado por hardware, que inclui renderização de texto através da biblioteca FreeType. O módulo de audio utiliza o OpenAL como base para reprodução e gravação de audio e o módulo de rede que fornece uma API para comunicação de dados em rede, através de TCP ou UDP.
A biblioteca é livre e open-source, distribuída de acordo com os termos da licença zlib/png. Está disponível em Windows, Linux, OS X e FreeBSD.
Arquitetura do Software
A biblioteca SFML é composta por vários módulos:
System - Classes para manipular vectores, strings de texto em Unicode, threads multiplataforma e temporizadores.
Window - Classes para abrir janelas com contextos de OpenGL activos, com suporte para lidar com input, incluindo joysticks (comandos e outros dispositivos)
Graphics - Classes para renderização de gráficos com aceleração por hardware, incluindo texto, polígonos e sprites.
Audio - Classes para reproduzir ou gravar audio. Incluindo espacialização 3D dos sons, streaming de músicas, tudo com aceleração por hardware.
Network - Classes para transmissão de dados por UDP e TCP multiplataforma, utilitários para encapsular dados em pacotes para o seu transporte e uma camada alto nível para transmitir dados via HTTP ou FTP.
Apesar de o módulo gráfico ser um dos mais procurados na biblioteca, programadores com interesse em usar o ambiente SFML para programar diretamente com OpenGL podem fazer isso facilmente ignorando o módulo gráfico e utilizando apenas o módulo Window. Todos os outros módulos são independentes, com excepção do System, do qual todos os outros módulos dependem.