Olá pessoal!
Estou tentando elaborar um sistema de erro incremental do oponente com base na quantidade de acertos que ambos (jogador e oponente) fazemos. Consegui fazer que o erro fosse progredindo até que o jogador marque o ponto, entretanto, ao resetar o contador do erro, a bolinha fica presa na raquete do oponente.
Defini uma chance de erro inicial (missEnemy) em zero, sendo que cada contato com a raquete (hit) haveria um incremento (missDelta) no erro inicial. Após a marcação da pontuação, esse erro seria zerado, entretanto isso faz que a posição y central da raquete do oponente se iguale a posição y central da bolinha, travando ela no canto.
Gostaria de saber se há algum código que possibilite um delay na execução do reset do erro, de forma que não trave a bolinha na raquete do oponente.
Segue abaixo código do erro incremental, sendo o link completo pro jogo https://editor.p5js.org/TMMichaelsen/sketches/76jT0kKPy.
//Enemy paddle miss chance variables
let missEnemy = 0;
let missDelta = 5;
//Check if ball collides with paddle (Library p5.collide2d)
function checkPaddleCollision(x,y) {
hit = collideRectCircle(x, y, paddleWidth, paddleHeight, posXBall, posYBall, radius);
if (hit) {
velXBall *= -1;
missEnemy += missDelta;
hitSound.play();
}
}
//Increase scoreboard on hit
function scoreboard() {
if (posXBall - radius < 0) {
enemyScore += 1;
scoreSound.play();
missEnemy = 0;
}
if (posXBall + radius > width) {
playerScore += 1;
scoreSound.play();
missEnemy = 0;
}
}
Edit:
Consegui resolver o erro com a variação negativa do incremento da variação quando o oponente erra, fazendo que a bolinha volte a bater na raquete até errar novamente pelo outro lado. Segue o código:
//Increase scoreboard on hit
function scoreboard() {
if (posXBall - radius < 0) {
enemyScore += 1;
scoreSound.play();
missEnemy = 0;
}
if (posXBall + radius > width) {
playerScore += 1;
scoreSound.play();
missEnemy -= missDelta;
missDelta *= -1;
}
}
Entretanto, ainda gostaria de saber se o Javascript contém alguma função que forme um delay na execução de alguma linha de código. As únicas formas que encontrei foi através de WHILE ou FOR, mas estas fazem uma execução em loop enquanto a condição for verdadeira, sendo que gostaria que houvesse uma execução quando a condição for falsa.
Obrigado!