3
respostas

Meu Pong não marca pontos, alguém pode me ajudar a descobrir o que é? Obrigada.

//variáveis da bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 25; let raio = diametro / 2;

//velocidade da bolinha let velocidadeXBolinha = 6; let velocidadeYBolinha = 6;

//variáveis da raquete let xRaquete = 5; let yRaquete = 150; let raqueteComprimento = 10; let raqueteAltura = 90;

//variáveis do oponente let xRaqueteOponente = 585; let yRaqueteOponente = 150; let velocidadeYOponente;

let colidiu = false;

//placar do jogo let meusPontos = 0; let pontosDoOponente = 0;

function setup() { createCanvas(600, 400); }

function draw() { background(0); mostraBolinha (); movimentaBolinha (); verificaColisaoBorda (); mostraRaquete (xRaquete, yRaquete); movimentaMinhaRaquete (); verificaColisaoRaquete (xRaquete, yRaquete); mostraRaquete (xRaqueteOponente, yRaqueteOponente); movimentaRaqueteOponente(); verificaColisaoRaquete (xRaqueteOponente, yRaqueteOponente) incluiPlacar (); marcaPonto ();

}

function mostraBolinha () { circle (xBolinha,yBolinha,diametro); }

function movimentaBolinha () { xBolinha += velocidadeXBolinha; yBolinha += velocidadeYBolinha; }

function verificaColisaoBorda () {

if (xBolinha + raio > width || xBolinha - raio < 0) { velocidadeXBolinha *= -1; }

if (yBolinha + raio > height || yBolinha - raio < 0) { velocidadeYBolinha *= -1; } }

function mostraRaquete (x,y) {

rect (x,y, raqueteComprimento, raqueteAltura);

}

function movimentaMinhaRaquete () { if (keyIsDown(UP_ARROW)) { yRaquete -=10; } if (keyIsDown(DOWN_ARROW)) { yRaquete +=10; }}

function verificaColisaoRaquete() { if (xBolinha - raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete){velocidadeXBolinha *= -1;} }

function verificaColisaoRaquete (x,y) { colidiu = collideRectCircle (x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio); if (colidiu) { velocidadeYBolinha *= -1; }}

function movimentaRaqueteOponente () { velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento /2-30; yRaqueteOponente += velocidadeYOponente }

function incluiPlacar () { fill (255) text (meusPontos, 278, 26); text (pontosDoOponente, 321, 26); }

function marcaPonto () { if (xBolinha > 590) { meusPontos += 1; } if (xBolinha < 10) { pontosDoOponente += 1; } }

3 respostas

oi Bruna conseguiria compartilhar o link do seu código para verificar melhor? do modo que colocou fica muito confuso para te dar uma resposta

Ele não marca os pontos pois não chega nas condições do IF xBolinha > 590 e xBolinha < 10

Pela sequencia das funções executadas acontece o seguinte.

1º ele mostraBolinha ()

2º movimentaBolinha ()

3º verificaColisaoBorda ()

Nessa sequencia o xBolinha inicia: 1º mostraBolinha () | xBolinha = 300 2º movimentaBolinha () | a variável xBolinha recebe +6 da velocidade ficando xBolinha = 306. 3º verificaColisaoBorda () cálculo o xBolinha + o raio e verifica se é maior que a largura da tela 600 | 306+12,5 = 318,5 > 600 (Falso). Diametro = 25 Raio = 12,5

Porém quando esta próximo da borda chega a essa situação 1º mostraBolinha () | xBolinha = 582 2º movimentaBolinha () | a variável xBolinha recebe +6 da velocidade ficando xBolinha = 588. 3º verificaColisaoBorda () 588+12,5 = 318,5 > 600,5 (Verdadeiro). Nesse momento o código faz a múltiplicação de inverter a velocidade. O que faz com que o máximo que o seu xBolinha chegue é a 588, depois irá reduzir esse valor de 6 em 6.

O mesmo acontece na outra borda. quando ele chega em 18 e precisa reduzir 6 e fazer a verificação da colisão com a bora ele ira alterar o sinal da operação e ira acrescentar 6 em 6.

Nunca sendo atendida a condição do if dos pontos.

@Thiago dos Santos Teixeira, perfeito nunca errou kskssksk resolveu o meu.