1
resposta

[Dúvida] Duvida no P5.js

A minha bola fica tremendo no meio do mapa!

(Não sei como anexa video aqui)

(Cole o codigo no p5.js para visualizar)

// Variáveis da bola ↓

let X_Bola = 300;
let Y_Bola = 200;
let Diametro = 23;
let Raio = Diametro / 2;

// Velocidade da bola ↓

let Velocidade_X_Bola = 6;
let Velocidade_Y_Bola = 6;

// Variáveis da Raquete ↓

let X_Raquete = 5;
let Y_Raquete = 150;
let Comprimento_Raquete = 10;
let Altura_Raquete = 90;
let Colisão = false;
let colidiu = false

// Variaveis do Oponente

let X_Oponente = 585;
let Y_Oponente = 150;
let Velocidade_Y_Oponente;

// Todo o resto

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

}

function draw() {
    background(0);
    Mostrar_Bola();
    Movimento_Bola();
    Colisão_Borda();
    Mostrar_Raquete(X_Raquete,Y_Raquete);
    Mostrar_Oponente(X_Oponente,Y_Oponente);
    //Colisão_Raquete();
    Verificar_Colisão_Raquete();
    Colisão_Oponente();
    Movimento_Raquete();
    Mostrar_Oponente();
    Movimento_Oponente();

}

function Mostrar_Bola() {
    circle(X_Bola, Y_Bola, Diametro)
}

function Movimento_Bola() {
    X_Bola += Velocidade_X_Bola;
    Y_Bola += Velocidade_Y_Bola;
}

function Colisão_Borda() {
    if (X_Bola + Raio > width || X_Bola - Raio < 0) {
        Velocidade_X_Bola *= -1;
    }
    if (Y_Bola + Raio > height || Y_Bola - Raio < 0) {
        Velocidade_Y_Bola *= -1;
    }
}

function Mostrar_Raquete(x,y){
    rect(x,y, Comprimento_Raquete, Altura_Raquete);
}

function Mostrar_Oponente(){
    rect(X_Oponente, Y_Oponente, Comprimento_Raquete, Altura_Raquete);
}

function Movimento_Raquete() {
    if (keyIsDown(UP_ARROW)) {

        Y_Raquete -= 10;
    }
    if (keyIsDown(DOWN_ARROW)) {
        Y_Raquete += 10;
    }
}

//function Colisão_Raquete(){
    if (X_Bola - Raio < X_Raquete + Comprimento_Raquete 
    && Y_Bola - Raio < Y_Raquete + Altura_Raquete 
    && Y_Bola + Raio > Y_Raquete){
      Velocidade_X_Bola *= -1;
     }
//}

function Verificar_Colisão_Raquete(x, y) {
    Colidiu = collideRectCircle(x, y, Comprimento_Raquete, Altura_Raquete, X_Bola, Y_Bola, Raio);
    if (Colidiu){
        Velocidade_X_Bola *= -1;
    }
}

function Colisão_Oponente() {
    Colidiu = collideRectCircle(X_Oponente, Y_Oponente, Comprimento_Raquete, Altura_Raquete, X_Bola, Y_Bola, Raio);
    if (Colidiu){
        Velocidade_X_Bola *= -1;
    }
}

function Movimento_Oponente(){
  Velocidade_Y_Oponente = Y_Bola - Y_Oponente - Comprimento_Raquete / 2 -30
  Y_Oponente += Velocidade_Y_Oponente
}
1 resposta

Oi Pedro, pelo que eu vi aqui vc esqueceu de passar os valores x e Y para a função de verificação de colisão da raquete Verificar_Colisão_Raquete(X_Raquete,Y_Raquete); Com isso na hora de calcular ele ta recebendo o valor errado e ela fica mudando de direção muito rápido.