2
respostas

[Dúvida] Código movimentaRaqueteOponente()

Boa tarde. Não estou entendendo muito bem por que no código está sendo subtraído o yBolinha, a yRaqueteOponente e a raqueteComprimento.

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

Obrigada!

2 respostas

Oi Cecília !! A raquete do oponente, é o programa quem faz funcionar. Sendo assim, o eixo Y da raquete do oponente está sincronizado com o eixo Y da bolinha. Repare que a raquete segue os movimentos no eixo y da raquete. O subir e o descer. O Y da bolinha -Y da raquete, é porque como a bolinha quando vai pra cima , ela se aproxima do zero, por isso, subtrai. E essa subtração, é a maneira feita para que a bolinha envie para a sua borda o seu eixo Y que se situa no meio. Os eixos estão no centro dela. e para mostrar uma colisão bem feita, a raquete não poderia bater até o meio da bolinha, para encontrar x e y. Veja que é feito subtração quando a bolinha sobe e também faz uma soma quando a bolinha desce. E o mesmo para o eixo X. Para esquerda subtrai e direita soma. Espero ter ajudado!! Essa imagem que fiz, pode lhe ajudar!! Bons estudos!!

eu entendi a explicação, mas não entendo muito bem, eu fiz uma função diferente e que quando o exercício avançar pode nao dar certo! mas por enquanto esta funcionando! não criei um "let"! só a função mesmo!

function moveOponente(){
  yOponente = yBolinha -40;

desce modo que eu fiz a raquete do oponente nem sobe muito nem desce muito!

meu código ficou assim aumentei em 10 o diâmetro da bolinha por que em alguns momentos ela etrava na diagonal da raquete e desaparecia e voltava depois como se existisse uma porta ali "bug"

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

let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;

// variaveis raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 90;

// oponente
let xOponente = 585;
let yOponente = 150;

// pontos 
let meusPontos = 0;
let oponentePontos = 0;

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

function draw() {
  background(0);
  mostraBolinha();
  moveBolinha();
  bordas();
  mostraRaquete(xRaquete, yRaquete);
  moveRaquete();
  raquetada();
  mostraRaquete(xOponente, yOponente);
  moveOponente();
  raquetadaOponente();
  mostraPontos();
  marcaPontos();
}
function mostraBolinha(){
  circle(xBolinha, yBolinha, diametro);
}
function moveBolinha(){
  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeYBolinha;
}
function bordas(){
  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, comprimentoRaquete, alturaRaquete);
}
function moveRaquete(){
  if (keyIsDown(UP_ARROW)){
    yRaquete -= 10;
  }
  if(keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }
}
function raquetada(){
  if (xBolinha - raio < xRaquete + comprimentoRaquete && yBolinha - raio < yRaquete + alturaRaquete && yBolinha + raio > yRaquete){
    velocidadeXBolinha *= -1
  }
}
function moveOponente(){
  yOponente = yBolinha -40;
}
function raquetadaOponente(){
  if (xBolinha + raio > xOponente && yBolinha -raio < yOponente + alturaRaquete && yBolinha + raio  > yOponente ){
      velocidadeXBolinha *= -1;
      }  
}
function mostraPontos(){
  fill(255);
  text(meusPontos, 235, 35);
  text(oponentePontos, 355, 35);
}
function marcaPontos(){
 if (xBolinha + raio > width){
   meusPontos += 1
 }
 if (xBolinha - raio < 0){
     oponentePontos += 1
 }
}

@Cecília de Camargo Rocha desculopa usar seu post mas e uma duvida que fiquei tambem!

obrigado!