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

Raquete do Inimigo descontrolada

//VÁRIÁVEIS

//bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 20;
let raio = diametro/2;
let velocidadeXBolinha = 7;
let velocidadeYBolinha = 7;

//player
let xPlayer = 0;
let yPlayer = 175;
let larguraRaquete = 10;
let alturaRaquete = 80;

//oponente
let xOponente = 590
let yOponente = 175
let velocidadeYOponente = yBolinha - yOponente - alturaRaquete/2 -30



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

function draw() {
  background(0);
  bolinha();
  movimentoBolinha();
  colisaoBorda();
  players(xPlayer,yPlayer);
  movimentoPlayer();
  players(xOponente,yOponente);
  movimentoOponente();

}

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

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

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

function players(x,y){
 rect( x,y,larguraRaquete,alturaRaquete);
}

function movimentoPlayer(){
  if ( keyIsDown( UP_ARROW)){
    yPlayer -= 10;
  }
  if (keyIsDown(DOWN_ARROW)){
    yPlayer += 10;
  }
}

function movimentoOponente(){
  yOponente += velocidadeYOponente;
}

Quando coloco o código dessa forma a raquete do inimigo sobe descontrolodamente, alguém poderia me apontar o erro?

2 respostas
solução!

Olá, Álvaro! Tudo bem com você?

Visualizei seu código e pude observar que a lógica da function movimentoOponente() é que está gerando o problema. Com esse código você está somando o valor de yOponente por ele mesmo mais a velocidadeYOponente. Dessa forma, a raquete do oponente percorre apenas o eixo de Y para cima com a velocidade declarada.

Ajustei o seu código e inclui a lógica para a funcionalidade.

Você pode copiar e testar no seu p5

function movimentoOponente(){
      velocidadeYOponente = yBolinha - yOponente - larguraRaquete / 2 - 30;
    yOponente += velocidadeYOponente;

}

Nessa lógica, agora a velocidade que o oponente percorre o eixo de Y será = a posição y da Bolinha - a posição de y da raquete opente - a largura da raquete dividido por 2 - 30.

Precisamos lembrar também que o ambiente de visualização do p5 segue a lógica presente no sistema de coordenadas do plano cartesiano. Caso você queira mais esclarecimentos, respondi um tópico bem semelhante ao seu com essas informações: Link para tópico sobre movimento da bolinha

Esse cálculo irá fazer a raquete do oponente "seguir" a posição do y da bolinha.

Espero que tenha ajudado, e se as dúvidas persistirem, é só avisar que estamos à disposição! :)

Muito obrigado !

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software