1
resposta

movimento da Raquete ta dando erro

let xBolinha = 300; let yBolinha = 200; let diametro = 20; let raio = diametro / 2;

let velocidadeXBolinha = 2; let velocidadeYBolinha = 2;

let xRaquete = 5; let yRaquete = 150; let comprimentoRaquete = 10; let alturaRaquete = 90;

let xRaqueteOponente = 585 ; let yRaqueteOponente = 150; let velocidadeYOponente;

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

function draw() { background(0); bolinha(); movimentoBolinha(); colisaoBolinhaBorda(); raquete(xRaquete, yRaquete); movimentoRaquete1(); colisaoRaquete1(); raquete(xRaqueteOponente, yRaqueteOponente); movimentoRaqueteOponente(); }

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

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

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

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

function raquete( x, y ) { rect(x, y, comprimentoRaquete, alturaRaquete) }

function movimentoRaquete1(){

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

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

function colisaoRaquete1() {

if (xBolinha -raio < xRaquete + comprimentoRaquete && yBolinha - raio < yRaquete + alturaRaquete && yBolinha + raio > yRaquete) { velocidadeXBolinha *= -1; } function movimentoRaqueteOponente() {velocidadeYOponente = yBolinha - yRaqueteOponente - comprimentoRaquete / 2 -30; yRaqueteOponente += velocidadeYOponente } }

1 resposta

Olá, Raphael. Tudo bem com você?

A lógica do seu projeto está correta, houve apenas um pequeno erro na hora da escrita e que comprometeu o funcionamento do código. Vou explicar.

Na função colisãoRaquete1() você englobou a função movimentoRaqueteOponente()

Mas como isso aconteceu?

As funções em JavaScript possuem uma estrutura para escrita, e nessa estrutura há o que chamamos de escopo de uma função.

O escopo nada mais é do que a parte, espaço ou pedaço de código que aquela função domina ou é responsável. Para delimitarmos o escopo de uma função, precisamos abrir e fechar as chaves da função { } . Vou inserir um exemplo para visualizarmos melhor.

function hello () {// início escopo

//toda essa área é o escopo da função hello()

} // final escopo

Nesse exemplo, a function hello() tem um escopo vazio de instruções, pois possui apenas o comentário. Dessa forma, eu posso então dar instruções para minha função executar, e preciso inserir essas instruções em seu escopo, ou seja, entre as chaves { } . Vamos ver?

function hello () {
return "Olá, Mundo!"
}

Como você pode observar, agora temos uma instrução dentro do escopo de nossa função hello(), e ela sempre irá retornar uma String com um "Olá, Mundo!" .

Tudo bem até aqui?

Vamos voltar para o seu código. Aqui você inseriu a função movimentoRaqueteOponente() no escopo de colisaoRaquete1(), e isso gerou o conflito, pois o interpretador procurava as informações declaradas e não encontrava (O console do p5 mostravava esse erro, que afirmava que existia uma variável inexistente ou não referenciada).

Vamos analisar o código:

function colisaoRaquete1() {
if (xBolinha -raio < xRaquete + comprimentoRaquete 
&& yBolinha - raio < yRaquete + alturaRaquete
&& yBolinha + raio > yRaquete) 

{ velocidadeXBolinha *= -1; 

} // bem aqui não houve o fechamento da função colisãoRaquete1()

function movimentoRaqueteOponente() {
velocidadeYOponente = yBolinha - yRaqueteOponente - comprimentoRaquete / 2 -30; 
yRaqueteOponente += velocidadeYOponente } 

} //e fechou a função colisãoRaquete1() bem aqui.

Como podemos observar, foi apenas o fechamento da chave no lugar equivocado que gerou o conflito. Eu inseri no local adequado e seu código funcionou normalmente (mas até encontrar isso foi um baita trabalho hahahah)

Vou deixar o código com as chaves dentro do escopo de cada função para você testar:

function colisaoRaquete1() {

if (xBolinha -raio < xRaquete + comprimentoRaquete 
&& yBolinha - raio < yRaquete + alturaRaquete 
&& yBolinha + raio > yRaquete) 
{   
     velocidadeXBolinha *= -1; 
} 
}// aqui fecha o escopo da colisaoRaquete1()

function movimentoRaqueteOponente() {

velocidadeYOponente = yBolinha - yRaqueteOponente - comprimentoRaquete / 2 -30; 
yRaqueteOponente += velocidadeYOponente 

} //Aqui fecha o escopo de movimentoRaqueteOponente()

Espero que essas informações consigam te ajudar e, se continuar com dúvidas, é só chamar! :)

Um abraço e bons estudos!