2022-05-07 – Sistema de Colisões Píxel-a-Píxel no meu Game Engine, em C++, e vídeo do meu Shooter de testes…
Aqui mostro como funciona a pixel-level detection no meu game engine.
Como não tenho tido tempo nenhum ultimamente, mostrei isto que ainda não tinha mostrado antes.
E aproveito para dizer que usei para as naves e torres inimigas, sprites fornecidas por um amigo Vitor Bonifácio que é artista na área, e desenhou estas naves, e as torres são naves inimigas todas contorcidas para fazer de torres hehehe.
É um sistema de testes que me mostra sempre todos os píxeis que estão a colidir entre dois sprites, ou seja, por exemplo, entre a nossa nave e uma nave ou aparelho inimigo.
Digamos que é uma intersecção de píxeis entre sprites.
O meu trading system está preparado para detectar automaticamente quais são os píxeis importantes de cada imagem, e o que não importa, e por isso podem ver que ele coloca com brilho apenas as partes que são comuns a ambos, não é algo mal feito como os sistemas de colisões de rectângulos usados por alguns jogos, em especial os antigos.
Aqui ou há mesmo nem que seja um único píxel a colidir, ou não há colisão!
Não há margem para falhas, tal como eu gosto.
O vídeo está é com 2 ou 3 FPS para o GIF animado ficar pequeno, daí parece horrível, mas ele tem centenas de FPS no jogo, é muito fluído, isto aqui é só para poupar espaço.
Se quiserem ver como é ao vivo, sem atrasos, e com tiros e sons e música, mostro o vídeo abaixo, que mostra o que aconteceu na semana passada, que devido a um bug, os inimigos disparavam na direcção contrária (contra eles mesmos) e se matavam, chamei-lhe de “suicidal enemies”, e relembro sempre que os sons dos tiros fiz eu com a boca hehehe:
Claro que neste caso tive de desabilitar as colisões, ou seja, se há colisões, não perdemos a vida, simplesmente vemos as mesmas.
Eu vou mais tarde criar um sistema, com tempo, que me permite calcular quantos píxeis colidem, e assim, se uma bala passar a raspar a nave, ao invés de lhe tirar uns 100%, se raspou, ou melhor, se só colidiu 10% da bala, só tiraria 10%, por exemplo.
Com isto, poderei ter danos mínimos se foi a raspar, ou danos totais.
Será um sistema de colisões perfeito, para um jogo perfeito.
O primeiro jogo que vou criar como remake de plataformas será o Batman the Movie, mas o primeiro remake que criarei no estilo de Shoot’Em Up será o do R-Type, e já podem ser pelo sprite da nossa nave, que vem do jogo R-Type (é desenhada por um autor na Internet cujo nome de momento não me lembro).
De qualquer das formas já vêem o sistema de colisões píxel-a-píxel, perfeito, sem falhas, só falta depois fazer o cálculo de quanta percentagem do embate existe, cálculo de danos, etc, para retirar os danos à nossa nave.
Para não me cansar, vou deixar o jogo de plataformas de lado uns tempos e focar-me no shooter, neste de naves, ao desenvolver o meu Game Engine. 🙂
Um dia quando tiver mais tempo partilho novidades!
Hasta!
2022-05-07.
Partilhado no LinkedIn em 2022-05-09:
«Só para mostrar como funciona a detecção de colisões a nível de píxeis no meu game engine, que está a ser desenvolvido do 0 em C++.
Tenho andado super ocupado ultimamente, por isso não partilho nada de novo, mas como não tinha partilhado isto antes, fica aqui isto, é o Shoot’Em Up de testes que criei para o meu game engine, estilo R-Type.
Criarei um remake do R-Type um dia talvez.
Esta detecção a nível de píxeis faz com que a nave sinta se levou com uma bala inteira ou só de raspão, e quanta % de dano retirar, etc.
A imagem acima está lenta porque é um gif com poucos frames para ser pequeno.
No site abaixo podem ver como é com sons (criados por mim em voz) e movimento fluído.
2022-05-09.»