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

Por que não consigo movimentar a raquete do oponente?

// Váriaveis bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let raio = diametro / 2;
let velocidadexBolinha = 6;
let velocidadeyBolinha = 6;

// Váriaveis Raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 90;

// Váriavei Raquete Oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeyOponente;


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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBolinha();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  verificaColisaoRaquete();
}
function mostraBolinha(){
  circle(xBolinha, yBolinha, diametro);
}
function movimentaBolinha(){
  xBolinha += velocidadexBolinha;
  yBolinha += velocidadeyBolinha;

}

function verificaColisaoBolinha(){

  if(xBolinha + raio > width || xBolinha < 0){
    velocidadexBolinha *= -1;
  }
  if(yBolinha + raio > height || yBolinha < 0){
    velocidadeyBolinha *= -1;
  }
}

function mostraRaquete(x, y){
  rect(x, y, comprimentoRaquete,alturaRaquete);
}

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

function verificaColisaoRaquete(){
  if(xBolinha - raio < xRaquete + comprimentoRaquete && yBolinha - raio < yRaquete + alturaRaquete && yBolinha + raio > yRaquete){
    velocidadexBolinha *= -1;
  }
}

function movimentaRaqueteOponente(){
    velocidadeyOponente = yBolinha - yRaqueteOponente -comprimentoRaquete / 2 - 30;
  yRaqueteOponente += velocidadeyOpoenente;

}
3 respostas
solução!

Olá, Carlos. Tudo bem com você?

Percebi dois pequenos detalhes no seu projeto mas que fazem toda a diferença no resultado final.

function draw()

  • Você não chamou a função "movimentaRaqueteOponente()" na "Draw()". Dessa forma, o p5 não vai entender que você quer que essa função apareça na tela.

Como resolvemos?

Basta inserirmos a function movimentaRaqueteOponente() na draw()

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBolinha();
  mostraRaquete(xRaquete, yRaquete);
  movimentaMinhaRaquete();
  verificaColisaoRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente(); // bem aqui eu chamo a função de movimentação da raquete do Oponente
}

Aqui também precisamos atentar para uma coisa: você chamou duas vezes a função "verificaColisaoRaquete()", isso gerou um conflito de informações e a raquete não reconhecia a colisão. Eu deixei apenas uma e funcionou muito bem (fiquei um bom tempo batendo cabeça, olhava a lógica e pensava: mas tá tudo certo aqui xD hahah. E o probleminha estava em outro lugar.)

function movimentaRaqueteOponente()

  • a Função "movimentaRaqueteOponente()" tem um pequeno erro de escrita na hora de utilizar a "velocidadeyOponente" e o interpretador vai entender que você está chamando uma outra variável no lugar (você escreveu velocidadeyOpoenente).

Como resolvemos?

Precisamos chamar o nome da variável na função exatamente como ele foi declarado. Então fica desse jeito:

function movimentaRaqueteOponente(){
    velocidadeyOponente = yBolinha - yRaqueteOponente -comprimentoRaquete / 2 - 30;
  yRaqueteOponente += velocidadeyOponente;

}

Como você pode observar são apenas detalhes que influenciaram no resultado do seu projeto. No entanto, a lógica segue correta e seu projeto está ficando muito bom!!

Parabéns pela dedicação e fique à vontade para perguntar aqui em caso de dúvidas.

Um abraço e bons estudos! :)

Olá !!! Obrigado pela ajuda, poderia me ajudar com mais uma duvida?

Claro que sim, Carlos. Vi seu novo tópico e já respondi, você pode conferir lá https://cursos.alura.com.br/forum/topico-minha-bolinha-movimenta-apenas-na-vertical-e-nao-colide-nas-raquete-alguem-pode-me-ajudar-162530 :)