Congratulações à todos os amigos do fórum da Alura!
Venho aqui hoje tentar resolver a dúvida que algumas pessoas tiveram, incluindo eu, com relação ao comportamento e á lógica da seguinte função:
function movimentaRaqueteOponente() {
velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30;
yRaqueteOponente += velocidadeYOponente;
}
Percebi respostas diferentes nos tópicos anteriores e resolvi trazer a minha análise.
Primeiro irei analisar o comportamento da função para em seguida analisar a lógica da mesma.
Comportamento da função:
- A variável "velocidadeYOponente" não se trata de uma grandeza descritiva, visto que não foi explicitado, ainda, as variáveis do movimento, por exemplo:
Velocidade = ΔS / ΔT, onde ΔS = Deslocamento (m) e ΔT = Tempo (s). No nosso caso temos, ΔS = pixels e ΔT = milisegundo.
O objetivo da "velocidadeYOponente" é ser atribuída à "yRaqueteOponente", dando à "yRaqueteOponente" movimento; este que será emparelhado com o movimento da variável "yBolinha".
Para uma medida de comparação vamos pegar a variável "velocidadeYBolinha", declarada no início do código;
let velocidadeYBolinha = 6;
Essa variável não significa que a bolinha irá se deslocar 6 pixels no eixo y a cada segundo mas, que a bolinha irá "ganhar" 6 pixels no eixo y, quando a função "movimentaBolinha()" for executada, constantemente, em um período de tempo por enquanto indefinido.
Pela experiência e a observação entendi que esse período de tempo é uma taxa de variação entre 0,04 e 0,05 segundos para imprimir um movimento na tela.
Dessa forma, utilizando a variável "velocidadeYBolinha = 6; temos que, a velocidade média da bolinha partindo do ponto inicial até a borda inferior da tela é de aproximadamente: 0.066m/s.
Para chegar nesse resultado aproximado utilizei a função "setInterval()" para imprimir a contagem de tempo no console enquanto também utilizo a função "console.log()" para imprimir o valor de yBolinha no console, assim:
Dentro da função "setup":
function setup() {
createCanvas(640, 400);
setInterval(function momento() {
console.log("1 segundo");
}, 1000)
}
Dessa maneira iremos saber no console do p5.js sempre que se passar um segundo.
A outra função "console.log()" irá nos informar o valor da variável "yBolinha" e será declarada dentro da função "movimentaRaqueteOponente".
function movimentaRaqueteOponente() {
velocidadeYOponente = yBolinha - yRaqueteOponente - raqueteComprimento / 2 - 30;
yRaqueteOponente += velocidadeYOponente;
console.log(yBolinha);
}
O resultado quando o jogo for executado é uma variação do valor de "yBolinha" sempre acrescido de +6:
206
212
218
224
230
236
242
248
254
260
266
272
278
284
290
296
302
308
314
320
326
332
338
344
350
356
362
368
374
1 segundo
Agora que já temos a velocidade média de "yBolinha" sabemos que nossa variável "velocidadeYOponente" irá receber uma velocidade de 0.066m/s, em um primeiro momento, mais a respectiva variação posicional no eixo y.
- O terceiro fator do cálculo atribuído à variável "velocidadeYOponente", que é a variável "raqueteComprimento", diferente do que comentaram em tópicos passados, não é aleatório; vejamos o seguinte cálculo:
Para raqueteComprimento = 10, temos:
[...] - raqueteComprimento / 2 - 30;
Substituindo: - (10/2) -30 = -(5) - 30 = -35
- Agora, como medida de comparação, se no lugar de "raqueteComprimento" usássemos "raqueteAltura", o resultado seria melhor?
Teríamos, nesse caso, - (90/2) -30 = - (45) - 30 = -75
Saberemos se esse resultado é melhor, assim como se a variável é aleatória, se verificarmos o ponto de colisão da raquete com a bola que veremos a seguir na explicação lógica.
Vejamos a continuação logo abaixo.