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

[Dúvida] A colisão Bolinha com Raquete Oponente, não está ocorrendo...=(

Olá, boa tarde, tudo bem?

Realizei a aula de Logica de programação, seguindo o paaso a passo do instrutor com a biblioteca, e funcionou 100%.

Quero praticar mais, e refiz todo o jogo do pong, sem utilizar biblioteca, finalizei até os placares funcionando, mas a colisão da bolinha com a raquete do oponente não consegui fazer funcionar, e o placar mesmo eu rebatendo com minha raquete, ele adiciona um ponto ao oponente...

Preciso de uma ajudinha, rs

O código está abaixo:

//Variaveis da bolinha. var yBolinha = 200; var xBolinha = 300; var DiametroBolinha = 25; var Raio = DiametroBolinha / 2;

//Variaveis da Velocidade da Bolinha. var VelocidadexBolinha = 4; var VelocidadeyBolinha = 4;

//Variaveis da raquete Esquerda var xRaqueteEsq = 15 var yRaqueteEsq = 200 var AlturaRaquete = 60; var LarguraRaquete = 10

//Variaveis Raquete Oponente. var xRaqueteOponente = 575 var yRaqueteOponente = 200 var VelocidadeYOponente;

//Placar do Jogo. var MeusPontos = 0 var PontosOponente = 0

//Função do Fundo do jogo function setup() { createCanvas(600, 400); } //Função da cor do nosso fundo e nossa movimentação da bolinha. function draw() { background(0); mostrabolinha(); movimentaX(); movimentaY(); colisaobordas(); RaqueteEsq(); MovimentaRaqueteEsq(); ColisaoRaqueteEsq(); RaqueteOponente(); MovimentaRaqueteOponente(); ColisaoRaqueteOponente(); IncluirPlacar(); PlacarOponente(); MeuPlacar(); }

//Função para mostrar a Bolinha. function mostrabolinha(){ circle (xBolinha,yBolinha,DiametroBolinha) }

//Função da movimentação em X da bolinha. function movimentaX(){ xBolinha += VelocidadexBolinha; } //Função da movimentação em Y da bolinha. function movimentaY(){ yBolinha += VelocidadeyBolinha; } //Função para conferir o toque nas bordas da bolinha. function colisaobordas(){ if (xBolinha + Raio > width || xBolinha - Raio < 0){ VelocidadexBolinha *= -1; } if (yBolinha + Raio > height || yBolinha - Raio < 0){ VelocidadeyBolinha *= -1; }}

//Função Raquete Esquerda function RaqueteEsq(){ rect (xRaqueteEsq,yRaqueteEsq,LarguraRaquete,AlturaRaquete) }

//Função para movimenta a raquete Esquerda em Y. function MovimentaRaqueteEsq(){ if (keyIsDown(UP_ARROW)){ yRaqueteEsq -= 10}; if (keyIsDown(DOWN_ARROW)){ yRaqueteEsq += 10}; } //Função para colidir a bolinha com a Raquete Esquerda. function ColisaoRaqueteEsq(){ if (xBolinha - Raio < xRaqueteEsq + LarguraRaquete && yBolinha - Raio < yRaqueteEsq + AlturaRaquete && yBolinha + Raio > yRaqueteEsq){ xBolinha *= -1; } } //Função para mostrar Raquete do oponente. function RaqueteOponente(){ rect (xRaqueteOponente,yRaqueteOponente,LarguraRaquete,AlturaRaquete) } //Função para movimentar a raquete do oponente, seguindo o Y da bolinha. function MovimentaRaqueteOponente(){ VelocidadeYOponente = yBolinha - yRaqueteOponente - AlturaRaquete / 2 - 5; yRaqueteOponente += VelocidadeYOponente } //Função para verificar a colisão da bolinha com a Raquete do Oponente. function ColisaoRaqueteOponente(){ if (xBolinha + Raio > xRaqueteOponente - LarguraRaquete && yBolinha - Raio > yRaqueteOponente - AlturaRaquete / 2 && yBolinha - Raio < yRaqueteOponente - AlturaRaquete / 2) { xBolinha *= -1;} } //Função para exibir e contabilizar o placar na tela do jogo. function IncluirPlacar(){ fill(255) text(MeusPontos,228,26,) text(PontosOponente,372,26) } function PlacarOponente(){ if (xBolinha - Raio < 1) PontosOponente += 1 } function MeuPlacar(){ if (xBolinha + Raio > 599) MeusPontos += 1 }

2 respostas
solução!

Buenas!! 1o - A pontuaçao do oponete sempre soma +1 pq voce está multiplicando o xBolinha por -1, e não a VelocidadexBolinha. 2o - Nao rebate na raquete do oponente porque as condiçoes do IF nao estao corretas. Abaixo uma sugestão para resolver estes dois problemas:

//Função para verificar a colisão da bolinha com a Raquete do Oponente. 
function ColisaoRaqueteOponente(){ 
  if (xBolinha + Raio > xRaqueteOponente - LarguraRaquete && yBolinha - Raio < yRaqueteOponente + AlturaRaquete && yBolinha + Raio > yRaqueteOponente) {
    VelocidadexBolinha *= -1;
  } 
} 

//Função para colidir a bolinha com a Raquete Esquerda. 
function ColisaoRaqueteEsq(){ 
  if (xBolinha - Raio < xRaqueteEsq + LarguraRaquete && yBolinha - Raio < yRaqueteEsq + AlturaRaquete && yBolinha + Raio > yRaqueteEsq){ 
    VelocidadexBolinha *= -1; 
  } 
} 

Outra coisa, quando colocar um texto de código no forum, seleciona esse texto e clica no botao "</>" que tem ali no menu. Facilita a vida de quem vai te ajudar ;)

Abs

Boa tarde!!

Valeu pela ajuda, deu certo !

Obrigado, e valeu pela dica do "</>" para códigos, não sabia dessa função aqui no Forum.

Valeu!