1
resposta

[Dúvida] A bolinha sempre colide no mesmo ponto

Oi! Percebi que bolinha sempre colide no mesmo ponto da raquete do oponente, ou seja, o oponente sempre acerta. Alterei o codigo da function movimentaRaqueteOponente para ver se concertava.

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

PARA ISSO: function movimentaRaqueteOponente(){ velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento/2 - 82; yRaqueteOponente += velocidadeYOponente; }

Agora ele sempre erra, se altero para 81, a raquete sempre acerta, ou seja, a bolinha não acerta pontos aleatorios da raquete do oponente. Utilizei o codigo do professor, mas acontece o mesmo erro. Se alguem puder me ajudar, agradeço.

//Variaveis da bolinha

let xBolinha = 300;
let yBolinha = 200;
let bolinhaDiametro = 25;
let raio = bolinhaDiametro/2;

//Variaveis velocidade da bolinha

let velocidadeXBolinha = 3;
let velocidadeYBolinha = 3;

//Variaveis da minha raquete

let xRaquete = 10;
let yRaquete = 150;
let raqueteAltura = 80;
let raqueteComprimento = 10;
let meusPontos = 0;

// Variaveis da raquete oponente
let xRaqueteOponente = 580;
let yRaqueteOponente = 150;
let velocidadeYOponente;
let pontosOponente = 0;

let colidiu = false;

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

function draw() {
  background(0);
  mostraBolinha();
  mostraRaquete(xRaquete, yRaquete);
  movimentaBolinha();
  verificaColisaoBorda();
  movimentaMinhaRaquete();
  //verificaColisaoMinhaRaquete();
  mostraRaquete(xRaqueteOponente, yRaqueteOponente);
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaquete, yRaquete);
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  mostraPlacar();
  verificaPlacar();

}

function mostraBolinha () {
  circle (xBolinha, yBolinha, bolinhaDiametro);
}

function mostraRaquete (x, y) {
  rect (x, y, raqueteComprimento, raqueteAltura);
}

function movimentaBolinha (){
  xBolinha += velocidadeXBolinha
  yBolinha += velocidadeYBolinha
}

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

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

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

function verificaColisaoMinhaRaquete (){
  if(xBolinha - raio < xRaquete && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete){
    velocidadeXBolinha *= -1
  }
}

function verificaColisaoRaquete(x, y){
  colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
  if(colidiu){
    velocidadeXBolinha *= -1
  }
}

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

function mostraPlacar(){
  fill(255);
  text(meusPontos, 278, 26);
  text(pontosOponente, 321, 26);
}

function verificaPlacar(){
  if(xBolinha > 585){
    meusPontos += 1;
  }
  if(xBolinha < 15){
    pontosOponente += 1
  }
}

https://editor.p5js.org/Ton.uchoa/sketches/KsUDVPkc5

1 resposta

coloquei acima de 93 e funcionou:

// 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 = 155;
let raqueteComprimento = 10;
let raqueteAltura = 90;

// Variáveis da raquete do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 155;
let velocidadeYOponente;

let colidiu = false;

//placar do jogo
let meusPontos = 0;
let pontosDoOponente = 0;

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

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaColisaoBorda();
  mostraRaquete(xRaquete,yRaquete);
  mostraRaquete(xRaqueteOponente,yRaqueteOponente)
  movimentaMinhaRaquete();
  movimentaRaqueteOponente();
  verificaColisaoRaquete(xRaquete, yRaquete);
  verificaColisaoRaquete(xRaqueteOponente, yRaqueteOponente);
  incluiPlacar();
  marcaPonto();
}

// Desenha a bolinha:
function mostraBolinha(){
  circle(xBolinha, yBolinha, diametro);
}

// Movimenta a Bolinha:
function movimentaBolinha(){
  xBolinha += velocidadeXBolinha;
  yBolinha += velocidadeYBolinha;
}

// Verifica Colisão da bolinha:
function verificaColisaoBorda(){

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

// Mostra raquete:
function mostraRaquete(x,y){
      rect(x, y, raqueteComprimento, raqueteAltura)  
    // rect(x, y, w, h) x = coord x; y = coord y; w = largura; h = altura
}

//Funcao para movimentar a raquete
function movimentaMinhaRaquete(){
  if (keyIsDown(UP_ARROW)){
    if (yRaquete > 0){
   yRaquete -= 10;
    }
  }
 if (keyIsDown(DOWN_ARROW)){
   if (yRaquete < 310){
  yRaquete += 10;
   }
 }
}

// **Função colisão das 2 raquetes com a bola**
function verificaColisaoRaquete(x, y){
  colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, diametro);
  if (colidiu){
    velocidadeXBolinha *= -1;
  }
}

// Função para movimentar a raquete do oponente
function movimentaRaqueteOponente(){
  velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 93;
  yRaqueteOponente += velocidadeYOponente;

}

function incluiPlacar() {
    fill(255); // Pinta o texto de branco
    text(meusPontos, 250, 26);
    text(pontosDoOponente, 350, 26);
}

function marcaPonto() {
    if (xBolinha > 590) {
        meusPontos += 1;
    }
    if (xBolinha < 10) {
        pontosDoOponente += 1;
    }
}

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