Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Mesmo corrigindo o erro, se pega na ponta da raquete faz 2 pontos, como corrigir?

Corrigi o bug de fazer vários pontos quando as vezes a bolina passa da raquete com a function (bolinhaNaoFicaPresa) mas em alguns momentos, a bolinha pega na ponta da raquete e faz 2 pontos. Como consigo corrigir isso? Segue meu projeto:

// variaveis da bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 13; let raio = diametro / 2;

// velocidade da bolinha let velocidadexBolinha = 6; let velocidadeyBolinha = 6; let raqueteComprimento = 10; let raqueteAltura = 90;

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

// variaveis do oponente let xRaqueteOponente = 585; let yRaqueteOponente = 150; let velocidadeYOponente;

// variaveis chance de errar let chanceDeErrar = 0;

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

let colidiu = false;

// sons do jogo let raquetada; let ponto; let trilha;

function preload(){ trilha = loadSound("trilha.mp3"); ponto = loadSound("ponto.mp3"); raquetada = loadSound("raquetada.mp3"); }

function setup() { createCanvas(600, 400); trilha.loop(); }

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

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; raquetada.play(); } }

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

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

function incluiPlacar(){ stroke(255) textAlign(CENTER) textSize(16) fill(color(24, 96, 0)) rect(150, 10, 40, 20) fill(255) text(meusPontos, 170, 26) fill(color(24, 96, 0)) rect(450, 10, 40, 20) fill(255) text(oponentePontos, 470, 26)

}

function marcaPonto(){ if (xBolinha > 590){ meusPontos += 1; ponto.play(); } if (xBolinha < 10){ oponentePontos += 1; ponto.play(); } }

function bolinhaNaoFicaPresa(){ if (xBolinha - raio < 0){ xBolinha = 23 } if (xBolinha + raio > 600){ xBolinha =580 } }

function calculaChanceDeErrar() { if (oponentePontos >= meusPontos) { chanceDeErrar += 1 if (chanceDeErrar >= 39){ chanceDeErrar = 40 } } else { chanceDeErrar -= 1 if (chanceDeErrar <= 35){ chanceDeErrar = 35 } } }

2 respostas

Oi Fábio. Experimente deixar a bolinha com 20 e até 22 se for preciso. E as raquetes vc mantém. Veja também se as raquetes não ficam longe da borda!! Bons estudos!!

para compartilhar o projeto: !

para colar um código:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Olá Romeu! Deixei a bolinha com 20 e deu certo! Muito Obrigado!