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

Bolinha tremendo e travada no meio da tela

Estou com uma dificuldade em meu código que não consigo enxergar, minha bolinha está travada e tremendo no centro, lembrando que estou apenas com a velocidadeXBolinha ligada, caso eu descomente a velocidadeYBolinha ela treme e fica indo para cima e para baixo, segue código

//variáveis da bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 15; let raio = diametro / 2;

//velocidade da bolinha let velocidadeXBolinha = 2; let velocidadeYBolinha = 6; let comprimentoRaquete = 10; let alturaRaquete = 90;

//variaveis da raquete let xRaquete = 5; let yRaquete = 150;

//variaveis do oponente

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

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

function draw() { background(0); mostraBolinha(); movimentaBolinha(); verificaColisaoBorda(); mostraRaquete(xRaquete, yRaquete); moveRaquete(); colisaoBolinhaRaquete(); mostraRaquete(xRaqueteOponente, yRaqueteOponente); movimentaRaqueteOponente(); colisaoBolinhaRaqueteOponente()

}

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

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

function verificaColisaoBorda(x, y) { if (x, y, 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 colisaoBolinhaRaquete() { if (xBolinha - raio < xRaquete + comprimentoRaquete && yBolinha - raio < yRaquete + alturaRaquete && yBolinha + raio > yRaquete) { velocidadeXBolinha *= +1; }

}

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

}

function colisaoBolinhaRaqueteOponente() { if (xBolinha - raio < xRaqueteOponente + comprimentoRaquete && yBolinha - raio < yRaqueteOponente + alturaRaquete && yBolinha + raio > yRaqueteOponente) { velocidadeXBolinha *= -1; } }

2 respostas
solução!

Olá José acredito que encontrei o motivo do seu código estar dando problema, na função :

"function verificaColisaoBorda(x, y) ", no 1° if e como parâmetros da função vc está passando 2 variáveis dentro dele: if ("x"," y", xBolinha + raio > width || xBolinha - raio < 0), esse x e esse y deve ser o que está causando o comportamento estranho no seu jogo. Eu fiz dessa forma:

function verificaColisaoBorda(){

if(yBolinha + raio > height || yBolinha - raio < 0 ){

velYBolinha *= -1; // no seu caso você chama de velocidaYBolinha

}

if(xBolinha + raio > width || xBolinha - raio < 0){

velXBolinha *= -1;  //no seu caso você chama de velocidaXBolinha

} }

Testa fazer essas alterações no código e acredito que vai funcionar normal, espero ter ajudado.

Consegui arrumar, 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