3
respostas

[Dúvida] Bolinha ultrapassa a raquete

O meu está com o seguinte problema: Quando rodo a aplicação, ela funciona normalmente, exceto pelo fato da bolinha estar ultrapassando as raquetes, tanto a minha raquete quanto a raquete do oponente. Não estou encontrando o erro. Alguém poderia me ajudar?

//Variáveis da bolinha let xBola = 300; let yBola = 200; let diametro = 20; let raio = diametro / 2;

//Velocidade da bolinha let velocidadeXBola = 5; let velocidadeYBola = 5; let raqueteComprimento = 7; let raqueteAltura = 80;

//Variaveis da raquete let xRaquete = 5; let yRaquete = 150;

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

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

function setup() { createCanvas(600, 400); fill("write"); }

function draw() { background(20); mostraBola(); movimentoBola(); verificaColisaoBorda(); mostraRaquete(xRaquete, yRaquete); movimentoMinhaRaquete(); verificaColisaoRaquete(xRaquete, yRaquete); mostraRaquete(xRaqueteOponente, yRaqueteOponente); movimentoRaqueteOponente(); verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente); incluiPlacar(); marcaPonto(); }

function mostraBola(){ circle(xBola,yBola,diametro); }

function movimentoBola(){ xBola += velocidadeXBola; yBola += velocidadeYBola; }

function verificaColisaoBorda(){ if (xBola + raio > width || xBola - raio < 0){ velocidadeXBola *= -1; }

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

function mostraRaquete(x,y){ rect(x, y, raqueteComprimento, raqueteAltura); }

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

function verificaColisaoRaquete(){ if (xBola - raio < xRaquete + raqueteComprimento && yBola - raio< yRaquete + raqueteAltura && yBola + raio > yRaquete){ velocidadeXBola *= -1; } }

function verificaColisaoRaqueteOponente(){ if (xBola - raio < xRaqueteOponente + raqueteComprimento && yBola - raio< yRaqueteOponente + raqueteAltura && yBola + raio > yRaquete){ velocidadeXBola *= -1; } }

function movimentoRaqueteOponente(){ velocidadeYOponente = yBola - yRaqueteOponente - raqueteComprimento /2 - 30; yRaqueteOponente += velocidadeYOponente }

function incluiPlacar() { fill('write'); text(meusPontos, 218, 26); text(pontosOponente, 321, 26); }

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

3 respostas

Boa tarde Júlia,

encontrei dois problemas no seu código:

  1. na função de verificaColisaoRaqueteOponente() tem um sinal invertido, logo no começo do código, o correto seria:

if (xBolinha + raio > xRaqueteOponente && yBolinha - raio < yRaqueteOponente + raqueteAltura && yBolinha + raio > yRaqueteOponente)

  1. No final dessa mesma função vc utilizou o mesmo yRaquete tanto para a sua raquete quanto para do oponente, é preciso utilizar a yRaqueteOponente, pois a posição y das raquetes serão diferentes.

A princípio não encontrei outro problema além desses, corrige esses dois pontos e verifica se funciona, caso contrário, volta aqui que tentamos outra forma!

Boa tarde Matheus, ainda não funcionou. Continua com o mesmo problema.

oi Julia, posta o link do projeto.