só marca ponto quando a bolinha vai em baixo da raquete do oponente
só marca ponto quando a bolinha vai em baixo da raquete do oponente
Enzo, tudo bom?
Posta seu código ai pra gente conseguir dar uma olhada, por favor.
//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametroBolinha = 15;
//variáveis da velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;
let raio = diametroBolinha / 2;
//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 72;
//variáveis do oponente
let xRaqueteOponente = 585
let yRaqueteOponente = 150
let velocidadeYOponente;
//placar do jogo
let meusPontos = 0;
let pontosOponente = 0;
function setup() {
createCanvas(600, 400);
}
function draw() {
background(0);
mostraBolinha();
movimentaBolinha();
verificaColisaoBorda();
mostraRaquete(xRaquete, yRaquete);
movimentaMinhaRaquete();
verificaColisaoRaquete();
mostraRaquete(xRaqueteOponente, yRaqueteOponente);
// movimentaRaqueteOpnonente();
verificaColisaoRaqueteOponente();
incluiPlacar();
marcaPonto();
}
function mostraBolinha(){
circle(xBolinha, yBolinha, diametroBolinha);
}
function movimentaBolinha(){
xBolinha += velocidadeXBolinha;
yBolinha += velocidadeYBolinha;
}
function verificaColisaoBorda(){
if (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 movimentaMinhaRaquete() {
if (keyIsDown(UP_ARROW)) {
yRaquete -= 10;
}
if (keyIsDown(DOWN_ARROW)) {
yRaquete += 10;
}
}
function verificaColisaoRaquete(){
if (xBolinha - raio < xRaquete + comprimentoRaquete && yBolinha - raio < yRaquete + alturaRaquete && yBolinha + raio > yRaquete){
velocidadeXBolinha *= -1;
}
}
function verificaColisaoRaqueteOponente() {
if (xBolinha + raio > xRaqueteOponente && yBolinha + raio > yRaqueteOponente && yBolinha + raio > yRaqueteOponente) {
velocidadeXBolinha *= -1;
}
}
function movimentaRaqueteOpnonente(){
velocidadeYOponente = yBolinha - yRaqueteOponente - comprimentoRaquete / 2 - 30;
yRaqueteOponente += velocidadeYOponente
}
function incluiPlacar(){
fill(255)
text(meusPontos, 278, 26)
text(pontosOponente, 321, 26)
}
function marcaPonto(){
if(xBolinha > 590){
meusPontos += 1;
}
if(xBolinha < 10){
pontosOponente += 1;
}
}
Boa tarde, o erro está na função: verificaColisaoRaqueteOponente. Perceba que você está fazendo duas verificações iguais, além de não estar levando em consideração a altura da raquete do oponente, por isso está dando o erro. Lembre-se também de levar em consideração a posição Y da bolinha subtraindo o raio, pois assim ele verifica a borda da bolinha e não o centro.
E como fica essa parte do código? Vc pode me ajudar?
function verificaColisaoRaqueteOponente() {
if (xBolinha + raio > xRaqueteOponente && yBolinha - raio > yRaqueteOponente) {
velocidadeXBolinha *= -1;
}
}
function verificaColisaoRaqueteOponente() {
if (xBolinha + raio > xRaqueteOponente && yBolinha - raio < yRaqueteOponente + comprimentoRaquete && yBolinha + raio > yRaqueteOponente) {
velocidadeXBolinha *= -1;
}
}
Agora ele não reconhece a colisão, ele bate na parede e atravessa a raquete do oponente e conta todos os pontos.
//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametroBolinha = 17;
//variáveis da velocidade da bolinha
let velocidadeXBolinha = 2;
let velocidadeYBolinha = 2;
let raio = diametroBolinha / 2;
//variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
let comprimentoRaquete = 10;
let alturaRaquete = 72;
//variáveis do oponente
let xRaqueteOponente = 585
let yRaqueteOponente = 150
let velocidadeYOponente;
//placar do jogo
let meusPontos = 0;
let pontosOponente = 0;
function setup() {
createCanvas(600, 400);
}
function draw() {
background(0);
mostraBolinha();
movimentaBolinha();
verificaColisaoBorda();
mostraRaquete(xRaquete, yRaquete);
movimentaMinhaRaquete();
verificaColisaoRaquete();
mostraRaquete(xRaqueteOponente, yRaqueteOponente);
movimentaRaqueteOpnonente();
verificaColisaoRaqueteOponente();
incluiPlacar();
marcaPonto();
}
function mostraBolinha(){
circle(xBolinha, yBolinha, diametroBolinha);
}
function movimentaBolinha(){
xBolinha += velocidadeXBolinha;
yBolinha += velocidadeYBolinha;
}
function verificaColisaoBorda(){
if (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 movimentaMinhaRaquete() {
if (keyIsDown(UP_ARROW)) {
yRaquete -= 10;
}
if (keyIsDown(DOWN_ARROW)) {
yRaquete += 10;
}
}
function verificaColisaoRaquete(){
if (xBolinha - raio < xRaquete + comprimentoRaquete && yBolinha - raio < yRaquete + alturaRaquete && yBolinha + raio > yRaquete){
velocidadeXBolinha *= -1;
}
}
function verificaColisaoRaqueteOponente() {
if (xBolinha + raio > xRaqueteOponente && yBolinha - raio < yRaqueteOponente + comprimentoRaquete && yBolinha + raio > yRaqueteOponente) {
velocidadeXBolinha *= -1;
}
}
function movimentaRaqueteOpnonente(){
velocidadeYOponente = yBolinha - yRaqueteOponente - comprimentoRaquete / 2 - 30;
yRaqueteOponente += velocidadeYOponente
}
function incluiPlacar() {
stroke(255);
textAlign(CENTER);
textSize(16);
fill(color(255, 140, 0));
rect(150, 10, 40, 20);
fill(255);
text(meusPontos, 170, 26);
fill(color(255, 140, 0));
rect(450, 10, 40, 20);
fill(255);
text(pontosOponente, 470, 26);
}
function marcaPonto() {
if (xBolinha > 590) {
meusPontos += 1;
}
if (xBolinha < 10) {
pontosOponente += 1;
}
}
Na segunda verificação, ao invés de comprimentoRaquete tem que ser alturaRaquete.
Deu certo! Muito obrigado pela atenção!