Postagens

SDL e programação de jogos - melhor movimentação e separação da colisão - parte 4

Imagem
Como vimos na última aula ( SDL-e-programação-de-jogos-detecção-de-colisão ) criamos uma função simples de detectar colisão entre dois retângulos SDL_Rect. Neste novo tutorial, vamos ver os procedimentos para separar um retângulo de dentro do outro e também como melhorar a movimentação. Sigam-me os maus porque deles serás o avião de batalha nos céus! Melhorando a movimentação do player Primeiro, pra poder separar os retângulos, devemos desacomplar ainda mais a lógica dos eventos da lógica de movimentação. Veja no código da aula passada tem o seguinte código que faz mover o retângulo do player: //loop principal while (!fim) { //loop de eventos //novo loop de eventos while (SDL_PollEvent(&evento)) { //verifica se clicou em fechar if (evento.type == SDL_QUIT) fim = 1; //verifica se a tecla pra baixo foi apertada if (evento.type == SDL_KEYDOWN) { if (evento.key.keysym.sym == SDLK_DOWN) { //move o player pra...

SDL e programação de jogos - detecção de colisão - parte 3

Imagem
Caso vc não tenha visto a parte 2, aqui o link: SDL-e-programacao-de-jogos-parte-2 Introdução Pra quem não sabe, todo jogo usa algoritmos de detecção de colisão e separação de objetos. Esse é um assunto bem amplo (e complexo!) mas neste post vc aprenderá o básico: vc vai aprender a como detectar colisão entre dois retângulos vc vai aprender a como separar um retângulo de dentro um do outro Algoritmo básico: bounding boxes! O algoritmo de detectar se dois retãngulos estão colidindo é o bounding boxes! É um dos algoritmos mais fáceis de aprender e também um dos mais fáceis de entender! Veja abaixo como ele funciona: pegue um retângulo e chame-o de rectA pegue outro retângulo e chame-o de rectB se a posição da lateral direita do rectA é MAIOR ou igual a posição da lateral ESQUERDA de rectB, então, continue para passo 4, senão, não é colisão se a posição da lateral esquerda do rectA é menor ou igual a posição da lateral DIREITA de rectB, então, contin...

SDL e programação de jogos parte 2

Imagem
Caso vc não tenha visto, aqui o link pra parte 1: SDL e jogos parte 1 Neste post, veremos como mover pela tela um retângulo simples, além de desenhar na janela com o renderer. Para fazer isso, vamos primeiro ver como criar o loop principal e aprender sobre funções de desenhar na tela, veja abaixo: O código acima não faz nada de muito útil, mas podemos melhorar, veja: #include <SDL2/SDL.h> #include <stdio.h> int main() { SDL_Init(SDL_INIT_VIDEO); //100 posição horizontal em pixels dentro do seu monitor do canto esquerdo superior para direita //150 posição vertical em pixels dentro do seu monitot do canto esquerdo superior pra baixo //640 é a largura da janela em pixel //480 é a altura da janela em pixel SDL_Window * janela = SDL_CreateWindow("loops e jogos", 100,150,640,480, SDL_WINDOW_OPENGL); SDL_Renderer * renderer = SDL_CreateRenderer(janela, -1, SDL_RENDERER_ACCELERATED); SDL_Event evento; int fim = 0; //loop principal whi...

SDL e programação de jogos parte 1

Imagem
Neste post vc verá um pouco sobre programação de jogos com SDL2. SDL2 como começar programar jogos? Tudo que vc precisa saber no momento é que no SDL2 temos este código básico: #include <SDL2/SDL.h> #include <stdio.h> int main() { SDL_Init(SDL_INIT_VIDEO); //resto do seu jogo aqui SDL_Quit(); return 0; } SDL_Init(SDL_INIT_VIDEO); --inicializa o SDL com o subsistema de vídeo (parâmetro SDL_INIT_VIDEO) SDL_Quit(); --finaliza o SDL e libera a memória da lib. Deve ser chamada DEPOIS de fechar tudo do jogo. O código acima não faz nada de muito útil, mas podemos melhorar, veja: #include <SDL2/SDL.h> #include <stdio.h> int main() { SDL_Init(SDL_INIT_VIDEO); SDL_Window * janela = SDL_CreateWindow("Janela de exemplo na posição inicial 100x100 com tamanho 640x480", 100,100,640,480, SDL_WINDOW_OPENGL); SDL_Renderer * renderer = SDL_CreateRenderer(janela, -1, SDL_RENDERER_ACCELERATED); //resto do seu jogo aqui //abaixo faz paralis...

Como criar jogos de nintendinho?

Imagem
 Segue um vídeo sobre como criar um jogo de NES em C: Só um complemento: As ferramentas usadas são essas: --compilador cc65: https://github.com/cc65/cc65 Essa é a versão usada: https://github.com/cc65/cc65/releases/tag/V2.13.3 --neslib: https://github.com/clbr/neslib/ Projeto Usado: https://www.mediafire.com/file/jpcba39hmv1j566/Nes+c.rar/file Como compilar o código no Linux? O compilador usado no vídeo tem um sério problema que ele é uma versão antiga do cc65 (versão 2.13) e por isso, nas versões mais recentes pode dar erro na linkagem mas compilar sem problema. Pra resolver isso siga os passos: Pegando uma versão mais atual do neslib: 1--instale o compilador cc65 (para Debian e derivados) $ sudo apt install cc65 gcc build-essentials Execute no terminal cc65 --version pra mostrar qual versão está instalada. Estou no Ubuntu 20.04 e meu cc65 é a versão 2.18-1 2--baixe o neslib mais atual deste repositório:  https://github.com/nesdoug/01_Hello  esse é um projeto melhorado p...

Tutorial programação de jogos com SDL1.2

  https://www.vivaolinux.com.br/artigo/Programacao-de-Jogos-com-SDL/ Mais um do Old But Gold! Neste tutorial vc aprende a programar alguns pequenos jogos em SDL1.2. A biblioteca hoje em dia tá abandonada essa versão mas ainda dá pra usar pra estudos. Em breve vou lançar um update deste e de outros tutoriais, aguardem!

Tutorial SDL1.2

  https://www.vivaolinux.com.br/artigo/Tutorial-SDL/ Este foi um dos primeiros tutoriais que escrevi, tá pra lá de velho mas ainda vale a pena a leitura! Ainda pretendo ecrever um update para SDL2, mesmo que a versão 2 já esteja ficando abandonada e trocada pela SDL3.