Olá! Quando eu e o oponente marcamos pontos, aumenta no placar de 5 em 5 e não de 1 em 1. Mesmo eu verificando, percebo que os códigos estão idênticos ao da aula.
Olá! Quando eu e o oponente marcamos pontos, aumenta no placar de 5 em 5 e não de 1 em 1. Mesmo eu verificando, percebo que os códigos estão idênticos ao da aula.
Olá Samuel, tudo bem?
Traz pra gente um print do seu código por favor, isso ajuda a vermos sua dúvida junto com o codigo escrito.
As vezes pode ser uma virgula, parenteses, etc que nossos olhos deixaram passar...
Até mais
Samuel, cheguei a ter o mesmo Bug, vi em um local aqui do Fórum que o ponto é marcado de acordo com o XBolinha, ou seja, o centro da bolinha, sem contabilizar a borda, logo ele marca por mais tempo a bolinha dentro da coordenada. Assim você tem que relacionar a velocidade e a posição que contabiliza os pontos, segue o meu ai:
function incluiPontos() {
if (xBolinha > 592) {
meusPontos += 1;
ponto.play();
}
if (xBolinha < 8) {
oponentePontos += 1;
ponto.play();
}
}
lembrando que minha variável de velocidade da Bolinha é 5:
let velocidadeXBolinha = 5;
let velocidadeYBolinha = 5;
OU
você pode tentar + e - os raios
olá, outra forma de solucionar esse problema é considerar o raio da bolinha dentro da função que marca os pontos.
function marcaPonto(){
// placar oponente
if ( xBolinha - raioBolinha < 1){
placarRaquete2 += 1; ponto.play()
}
// placar personagem
if ( xBolinha + raioBolinha > 599){
placarRaquete1 += 1; ponto.play()
}
}
pode ser também que a bolinha esta marcando os pontos antes de encostar na borda, nesse caso a bolinha marca ponto na ida e na volta. caso seja esse o problema basta você redefinir o ponto " x " onde a bolinha registra o ponto.
ps: estou utilizando uma tela de 600 x 400.
Obrigado a todos, mas ainda não consegui achar o erro!
Aqui está uma cópia de algumas partes do meu código. Até mais!
//variáveis da bolinha let xBolinha = 300; let yBolinha = 200; let diametro = 32; let raio = diametro / 2;
//velocidade da bolinha let velocidadeXBolinha = 6; let velocidadeYBolinha = 6; let raqueteComprimento = 10; let raqueteAltura = 90;
()function marcaPonto(){ if (xBolinha > 590){ meusPontos += 1; ponto.play(); } if (xBolinha < 10){ pontosDoOponente += 1; ponto.play(); } }
Samuel, conpartilha o link do p5.js para podermos olhar o seu código,
na função maraca ponto tem um erro, tem um " () " antes da palavra resevada function.
()function marcaPonto(){ if (xBolinha > 590){ meusPontos += 1; ponto.play(); } if (xBolinha < 10){ pontosDoOponente += 1; ponto.play(); } }
Assim está meu código!
Samuel, se você clicar em </> que tem aqui, você pode compartilhar o seu código. Eu olhei a parte do seu código que enviou, mas não localizei erro. O meu está igual ao seu nesse print que enviou, porém sem o "ponto.play()" e não dá erro. O que deve estar dando erro para você não é na função que marca os pontos, mas em outra função.
function marcaPontos(){
if (xBolinha<10){
pontosDoOp+=1
}
if (xBolinha>590){
meusPontos+=1
}
}
Tenta enviar o seu código inteiro como eu falei no começo, clicando em </>, para que possamos ver o código.
Tem como fazer essa alteraçao nojogo? Estou com o mesmo problema e ainda não comecei a codificar.
olá, Mylena, respondendo a sua pergunta da para fazer todas as alterações aqui sugeridas no seu código, você só precisa ver qual solução se adequa melhor ao seu projeto.
Ok! vou envia-lo inteiro!
//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 32;
let raio = diametro / 2;
//velocidade da bolinha
let velocidadeXBolinha = 6;
let velocidadeYBolinha = 6;
let raqueteComprimento = 10;
let raqueteAltura = 90;
//Variáveis da raquete
let xRaquete = 5;
let yRaquete = 150;
//variáveis do oponente
let xRaqueteOponente = 585;
let yRaqueteOponente = 150;
let velocidadeYOponente;
let colidiu = false;
//placar do jogo
let meusPontos = 0;
let pontosDoOponente = 0;
//sons do jogo
let raquetada;
let ponto;
let trilha;
function preload(){
trilha = loadSound("trilha.mp3");
ponto = loadSound("ponto.mp3")
raquetada = loadSound("raquetada.mp3")
}
function setup() {
createCanvas(600, 400);
trilha.loop();
}
function draw() {
background(0);
mostraBolinha();
movimentaBolinha();
verificaColisaoBorda();
mostraRaquete(xRaquete, yRaquete);
movimentaMinhaRaquete();
//verificaColisaoRaquete();
verificaColisaoRaquete(xRaquete, yRaquete);
mostraRaquete(xRaqueteOponente, yRaqueteOponente);
movimentaRaqueteOponente();
verificaColisaoMinhaRaquete(xRaqueteOponente, yRaqueteOponente);
incluiPlacar();
marcaPonto();
}
function mostraBolinha(){
circle(xBolinha, yBolinha, diametro);
}
function movimentaBolinha(){
xBolinha += velocidadeXBolinha;
yBolinha += velocidadeYBolinha;
}
function verificaColisaoBorda(){
if (xBolinha > width ||
xBolinha < 0){
velocidadeXBolinha *= -1;
}
if (yBolinha > height ||
yBolinha < 0){
velocidadeYBolinha *= -1;
}
}
function mostraRaquete(x,y){
rect(x, y, raqueteComprimento, raqueteAltura);
}
function movimentaMinhaRaquete() {
if (keyIsDown(UP_ARROW)) {
yRaquete -= 10;
}
if (keyIsDown(DOWN_ARROW)) {
yRaquete += 10;
}
}
function verificaColisaoRaquete(){
if (xBolinha - raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete){
velocidadeXBolinha *= -1;
raquetada.play();
}
}
function verificaColisaoMinhaRaquete(x, y) {
colidiu = collideRectCircle(x, y, raqueteComprimento, raqueteAltura, xBolinha, yBolinha, raio);
if (colidiu) {
velocidadeXBolinha *= -1;
raquetada.play();
}
}
function movimentaRaqueteOponente(){
velocidadeYOponente = yBolinha -yRaqueteOponente - raqueteComprimento /2 - 70;
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(pontosDoOponente, 470, 26);
}
function marcaPonto() {
if (xBolinha > 590) {
meusPontos += 1;
ponto.play();
}
if (xBolinha < 10) {
pontosDoOponente += 1;
ponto.play();
}
}
Samuel, talvez seja por causa do seu diâmetro. Acho que está muito grande. Tente diminuí-lo para 15:
//variáveis da bolinha
let xBolinha = 300;
let yBolinha = 200;
let diametro = 15;
let raio = diametro / 2;
Obrigado! Mudei o diâmetro para 15, mas infelizmente o erro permanece.
Samuel, eu olhei o seu código e rodei ele no p5.js, e para ele funcionar corretamente você precisa fazer algumas alterações a primeira é na função "verificaColisaoBorda()" nela você esqueceu de considerar o raio da bolinha fazendo com que a mesma ultrapassasse os limites da tela, a segunda alteração é na função "marcaPonto()" que para manter o diâmetro atual da bolinha você precisa redefini o ponto "x" no qual a bolinha marca o ponto ou considerar o raio da bolinha na função assim independente do diâmetro da bolinha a função ira funcionar corretamente.
Primeira alteração :
function verificaColisaoBorda(){
if (xBolinha + raio > width ||
xBolinha - raio < 0){
velocidadeXBolinha *= -1;
}
if (yBolinha + raio > height ||
yBolinha - raio < 0){
velocidadeYBolinha *= -1;
}
}
*Segunda alteração *
function marcaPonto() {
if (xBolinha > 582) {
meusPontos += 1;
ponto.play();
}
if (xBolinha < 18) {
pontosDoOponente += 1;
ponto.play();
}
Segunda alteração considerando o raio da bolinha
function marcaPonto() {
if (xBolinha + raio > 599) {
meusPontos += 1;
ponto.play();
}
if (xBolinha - raio < 1) {
pontosDoOponente += 1;
ponto.play();
}
}
espero ter ajudado, qualquer duvida e só chamar.
Percebi que nessa função estava faltando essas palavras " + raio e - raio ". coloquei elas e começou a marcar 1 em 1 normalmente.
function verificaColisaoBorda(){
if (xBolinha + raio> width ||
xBolinha - raio< 0){
velocidadeXBolinha *= -1;
}
if (yBolinha + raio> height ||
yBolinha - raio < 0){
velocidadeYBolinha *= -1;
}
}