Inspirado no curso de Pong comecei a tentar fazer um jogo de nave inspirado em Space Invaders. Por enquanto estou tentando apenas criar uma nave e fazer com que ela solte um projetil que, ao colidir com um satélite, faça desparecer da tela o satélite e o projetil. Além de compartilhar essa ideia, gostaria de duas ajudas para seguir construindo o jogo. Estou com problemas para conseguir fazer a colisão entre o projetil e o satelite. Não consegui fazer ela funcionar nem escrevendo a colisão na unha, nem usando a biblioteca pronta. Deixo aqui as 2 tentativas. Outra coisa que não funcionou foi apertar uma vez um botão para o tiro sair voando. Então precisei usar a função em que o botão fica sendo pressionado.
colisão na Unha
let xNave = (260);
let yNave = (380);
let alturaNave = (7);
let comprimentoNave = (80);
let yProjetil = (350);
let xProjetil;
let diametroProjetil = (15) ;
let velocidadeDoTiro = (1);
let xSatelite = (30);
let ySatelite = (30);
let larguraSatelite = (100);
let alturaSatelite = (30);
function setup() {
createCanvas(600, 400);
}
function draw() {
background(100);
mostraNave();
mostraSatelite();
movimentaNave ();
mostraTiro();
colisao ();
}
function mostraNave(){
rect (xNave,yNave,comprimentoNave,alturaNave);
}
function movimentaNave(){
if (keyIsDown (RIGHT_ARROW) && xNave<480) {
xNave += 9;
}
else if (keyIsDown (LEFT_ARROW) && xNave>40){
xNave -=9;
}
}
function mostraTiro(){
// a ideia era precisa apertar o botão apenas uma vez, mas não funcionou
// if (key === 'UP_ARROW') {
if (keyIsDown (UP_ARROW)) {
let xProjetil = (xNave+40);
circle( xProjetil,yProjetil,diametroProjetil);
yProjetil -= velocidadeDoTiro;
}
}
function mostraSatelite (){
rect (xSatelite,ySatelite,larguraSatelite,alturaSatelite)
}
function colisao (){
if ( yProjetil === ySatelite + 27){
// minha ideia inicial era incluir isso aqui na condição:
// && xProjetil < xSatelite + 300 && xProjetil > xSatelite ) {
// Mas como não estava funcionando, essa parte da colisão está comentada. Pois pelo menos consigo fazer a explosão acontecer quando o projetil atinge // a altura do satelite com esse bloco.
diametroProjetil = 0;
xSatelite = 0;
ySatelite = 0;
larguraSatelite = 0;
alturaSatelite = 0;
}
}
E essa foi a tentativa com a biblioteca:
let xNave = (260);
let yNave = (380);
let alturaNave = (7);
let comprimentoNave = (80);
let yProjetil = (350);
let xProjetil;
let diametroProjetil = (15);
let raioProjetil = diametroProjetil/2
let velocidadeDoTiro = (1);
let xSatelite = (30);
let ySatelite = (30);
let larguraSatelite = (100);
let alturaSatelite = (30);
let colidiu = false;
function setup() {
createCanvas(600, 400);
}
function draw() {
background(100);
mostraNave();
mostraSatelite();
movimentaNave ();
mostraTiro();
colisao ();
}
function mostraNave(){
rect (xNave,yNave,comprimentoNave,alturaNave);
}
function movimentaNave(){
if (keyIsDown (RIGHT_ARROW) && xNave<480) {
xNave += 9;
}
else if (keyIsDown (LEFT_ARROW) && xNave>40){
xNave -=9;
}
}
function mostraTiro(){
// if (key === 'UP_ARROW') {
if (keyIsDown (UP_ARROW)) {
let xProjetil = (xNave+40);
circle( xProjetil,yProjetil,diametroProjetil);
yProjetil -= velocidadeDoTiro;
}
else {
yProjetil = 350;
}
}
function mostraSatelite (){
rect (xSatelite,ySatelite,larguraSatelite,alturaSatelite)
}
function colisao (){
colidiu = collideRectCircle (xSatelite, ySatelite, larguraSatelite, alturaSatelite, xProjetil, yProjetil, raioProjetil);
if (colidiu){
diametroProjetil = 0;
xSatelite = 0;
ySatelite = 0;
larguraSatelite = 0;
alturaSatelite = 0;
}
}
Mas nada acontece, o projetil passa ileso.