Boa tarde. O meu jogo está pronto e rodando, mas um problema eu não consegui corrigir e gostaria de um norte para realizar determinados incrementos no meu código. Primeiro a respeito dos incrementos:
- Eu programei para que a bolinha voltasse para o centro da tela quando um ponto fosse marcado. Entretanto, eu gostaria de deixar um delay nessa ação, pois instantaneamente ela começa a se mover a partir do centro logo após um ponto ser marcado, não dando tempo para os jogadores se preparem após levarem/marcarem um ponto. Vi algumas informações na internet a respeito de setInterval(), setTimeou(), wait(), delayTime(), etc, porém não consegui fazer funcionar. Parece que o js não as reconhece como funções. Não sei se apenas não soube usar ou se tem que adicionar alguma biblioteca.
- Eu gostaria de fazer um menu para o jogo, onde pudesse ser escolhido o modo de jogo: 2 players ou contra o bot. Pensei em utilizar redraw(), createCheckbox(), etc. Mas não sei por onde começar e gostaria de algumas dicas. Esse menu seria programado na mesma função draw() onde está o resto do meu código?
Sobre o problema: consegui com as dicas da seção 5.8 resolver o bug da bolinha ficar presa ATRÁS da raquete, por fora do background e contabilizar vários pontos. Entretanto, forçando a colisão da raquete com a bolinha pela parte lateral (de baixo para cima ou de cima para baixo), ainda acontece de a bolinha ficar momentaneamente presa DENTRO da raquete até se desprender, apesar de isso não estar contabilizando pontos, o que é positivo. Meu código está assim:
//Variáveis da bolinha
let xCircle = 300;
let yCircle = 200;
let diameter = 15;
let radius = diameter / 2;
//Variáveis da velocidade da bolinha
let xCircleVelocity = 6;
let yCircleVelocity = 6;
//Variáveis da raquete 1
let xRect1 = 5;
let yRect1 = 155;
let widthRect = 10;
let heightRect = 90;
//Variáveis da velocidade da raquete do(s) player(s)
let yRectVelocity1 = 10;
//Variáveis da raquete 2 - que possui mesmos comprimento e largura que a 1
let xRect2 = 585;
let yRect2 = 155;
//Variáveis para o placar
let p1 = 0;
let p2 = 0;
//Variáveis para o som do jogo
let racket;
let points;
let ost;
function preload(){
ost = loadSound("trilha.mp3");
points = loadSound("ponto.mp3");
racket = loadSound("raquetada.mp3");
}
function setup() {
createCanvas(600, 400);
ost.loop();
}
function draw() {
background(0);
drawCircle();
drawRect(xRect1, yRect1);
drawRect(xRect2, yRect2);
moveCircle();
moveRect1();
//moveRect1Const();
//moveRect2();
//moveRect2Const();
backgroundCollision();
circleRectCollision();
circleRect2Collision();
scoreboard();
moveRectP2();
}
//Função para desenhar a bolinha na tela
function drawCircle(){
circle(xCircle, yCircle, diameter);
}
//Função para desenhar aS raqueteS
function drawRect(x, y){
rect(x, y, widthRect, heightRect);
}
//Função para fazer a bolinha mexer
function moveCircle(){
xCircle += xCircleVelocity;
yCircle += yCircleVelocity;
}
//Função para mover a raquete do player
function moveRect1(){
if(keyIsDown(87) && yRect1 >= 10){
yRect1 -= yRectVelocity1;
}
if(keyIsDown(83) && yRect1 + heightRect <= height - 10){
yRect1 += yRectVelocity1;
}
}
//Função para movimentar a raquete do player 2
function moveRectP2(){
if(keyIsDown(UP_ARROW) && yRect2 >= 10){
yRect2 -= yRectVelocity1;
}
if(keyIsDown(DOWN_ARROW) && yRect2 + heightRect <= height - 10){
yRect2 += yRectVelocity1;
}
}
//Função para colidir a bolinha com a borda da tela
function backgroundCollision(){
if(xCircle + radius >= width ||
xCircle - radius <= 0){
xCircleVelocity *= -1;
}
if(yCircle + radius >= height ||
yCircle - radius <= 0){
yCircleVelocity *= -1;
}
}
//Função para colidir a bolinha com a raquete do player
function circleRectCollision(){
if(xCircle - radius <= xRect1 + widthRect &&
yCircle + radius >= yRect1 &&
yCircle - radius <= yRect1 + heightRect){
xCircleVelocity *= -1;
racket.play();
}
}
//Função para colidir a bolinha com a raquete do bot
function circleRect2Collision(){
if(xCircle + radius >= xRect2 &&
yCircle + radius >= yRect2 &&
yCircle - radius <= yRect2 + heightRect){
xCircleVelocity *= -1;
racket.play();
}
}
//Função para o placar
function scoreboard(){
if(xCircle - radius < 3){
p2 += 1;
points.play();
xCircle = 300;
yCircle = 200;
}
if(xCircle + radius > width - 3){
p1 += 1;
points.play();
xCircle = 300;
yCircle = 200;
}
textAlign(CENTER);
stroke(255);
textSize(20);
fill(color(255, 125, 51));
rect(145, 7, 60, 24);
rect(395, 7, 60, 24);
fill(255);
text(p1, 175, 26);
text(p2, 425, 26);
}
Grato desde já!