Olá, Laís, tudo bem?
Achei interessante o seu ímpeto de deixar o código do jogo mais limpo, você utilizou uma boa prática de codificação chamada “don't repeat yourself”, em português não se repita, cujo objetivo é evitar ambiguidades no código.
Note que na função original verificaColisãoBorda
, não está sendo utilizado nenhum argumento, apenas está sendo chamada na função draw
. Nas condições dessa função nós estamos alterando diretamente o valor das variáveis velocidadeXBolinha
e velocidadeYBolinha
.
Acontece que na função que você tentou criar, ao passar o valor no argumento, você está passando a referência desse valor, uma cópia, ou seja, as velocidades não estão sendo alteradas. As alterações estão sendo feitas apenas nessa “cópia”.
Isso acontece porque no JavasScript todos os argumentos de uma função são sempre passados por valor. Isso significa que o JavaScript copia os valores das variáveis passadas em argumentos dentro da função. As alterações feitas nesses argumentos não irão refletir no código fora da função.
Uma solução seria adaptar sua função para ao invés de receber como parâmetro a cópia da variável, receber um parâmetro booleano alterarLargura
e dependendo se você passar true
(caso seja largura) ou false
(caso seja altura) alterará a velocidadeXBolinha
ou velocidadeYBolinha
.
A função ficará assim:
function verificaBordas(posicao, borda, alterarLargura) {
if (posicao + raio > borda || posicao - raio < 0){
if (alterarLargura){
velocidadeXBolinha *= -1;
}else{
velocidadeYBolinha *= -1;
}
}
}
E na função draw
você chamará essa função com os devidos argumentos:
verificaBordas(xBolinha, width, true);
verificaBordas(yBolinha, height, false);
Espero ter ajudado.
Caso surja dúvidas, estou à disposição.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!