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

Como mover a raquete do oponente?

Consegui criar a raquete do oponente e verificar a colisão, porém, não consigo movimentar a raquete do oponente usando como referência o eixo y da bolinha... Alguém consegue me ajudar?

4 respostas
solução!

Oi Vinicius, Tudo bem? poderia compartilhar seu código? para ver se consigo te ajudar?

O código a movimentação do oponente é o seguinte:

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

Primeiro você cria a função para o movimento movimentaRaqueteOponente()

function movimentaRaqueteOponente(){


}

em seguida precisamos criar a variável que vai receber a velocidade em que a raquete do oponente ira se movimentar -> velocidadeYOponente =

e nela colocaremos o yBolinha e descontar o yRaquete e descontar o comprimento dividido por 2, para que o ponto de onde a bolinha bata seja no centro da raquete.

velocidadeYOponente = yBolinha -yRaqueteOponente - raqueteComprimento / 2 - 30;

e por final vamos colocar a velocidade que acabamos de criar, para o y da raquete, igual fizemos para movimentar a bolinha

yRaqueteOponente += velocidadeYOponente

Olá Leonardo, tudo bem e com você?

Muito obrigado pela ajuda!

Aqui está meu código:

//Variáveis da bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 15; 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 = 8; let RaqueteAltura = 90;

//Variáveis segunda raquete let xRaquete2 = 585; let yRaquete2 = 150; let RaqueteComprimento2 = 8; let RaqueteAltura2 = 90; let colidiu = false;

//desenha a tela function setup() { createCanvas(600, 400); }

//principal function draw() { background(0); DesenhaBolinha(); VelocidadeBolinha(); VerificaColisao(); MostraRaquete(); MostraRaquete2(); MovimentaRaquete(); MovimentaRaquete2(); ColisaoRaquete(); ColisaoRaquete2();

}

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

function VelocidadeBolinha(){ xBolinha += velocidadeXBolinha; yBolinha += velocidadeYBolinha;

}

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

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

} }

function MostraRaquete(){ rect(xRaquete, yRaquete, RaqueteComprimento, RaqueteAltura);

}

function MostraRaquete2(){ rect(xRaquete2, yRaquete2, RaqueteComprimento2, RaqueteAltura2); }

function MovimentaRaquete(){ if(keyIsDown(UP_ARROW)){ yRaquete -= 10; }

if(keyIsDown(DOWN_ARROW)){ yRaquete += 10; } }

function MovimentaRaquete2(){

} function ColisaoRaquete(){ if(xBolinha - raio < xRaquete + RaqueteComprimento && yBolinha - raio < yRaquete + RaqueteAltura && yBolinha + raio > yBolinha){ velocidadeXBolinha *= -1; } }

function ColisaoRaquete2(){ colidiu = collideRectCircle(xRaquete2, yRaquete2, RaqueteComprimento2, RaqueteAltura2, xBolinha, yBolinha, diametro); if(colidiu){ velocidadeXBolinha *= -1; } }

Obrigado por mandar o código Vinicius .

Aqui esta ele completo, já com a movimentação da segunda raquete como te expliquei lá em cima.

fico feliz em ter ajudado

//Variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
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 = 8;
let RaqueteAltura = 90;

//Variáveis segunda raquete
let xRaquete2 = 585;
let yRaquete2 = 150;
let RaqueteComprimento2 = 8;
let RaqueteAltura2 = 90;
let colidiu = false;

//desenha a tela

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

function draw() {
  background(0);
  DesenhaBolinha();
  VelocidadeBolinha();
  VerificaColisao();
  MostraRaquete();
  MostraRaquete2();
  MovimentaRaquete();
  MovimentaRaquete2();
}

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

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

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

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

function MostraRaquete() {
  rect(xRaquete, yRaquete, RaqueteComprimento, RaqueteAltura);
}

function MostraRaquete2() {
  rect(xRaquete2, yRaquete2, RaqueteComprimento2, RaqueteAltura2);
}

function MovimentaRaquete() {
  if (keyIsDown(UP_ARROW)) {
    yRaquete -= 10;
  }

  if (keyIsDown(DOWN_ARROW)) {
    yRaquete += 10;
  }
}

function MovimentaRaquete2() {
  velocidadeYOponente = yBolinha -yRaquete2  - RaqueteComprimento2 / 2 - 30;
  yRaquete2 += velocidadeYOponente

}

function ColisaoRaquete() {
  if (
    xBolinha - raio < xRaquete + RaqueteComprimento &&
    yBolinha - raio < yRaquete + RaqueteAltura &&
    yBolinha + raio > yBolinha
  ) {
    velocidadeXBolinha *= -1;
  }
}

function ColisaoRaquete2() {
  colidiu = collideRectCircle(
    xRaquete2,
    yRaquete2,
    RaqueteComprimento2,
    RaqueteAltura2,
    xBolinha,
    yBolinha,
    diametro
  );
  if (colidiu) {
    velocidadeXBolinha *= -1;
  }
}

Valeu Leonardo, ficou ótimo!

Muito obrigado pela ajuda, abraço!