12
respostas

Não faz o som do ponto e as vezes a bolinha buga na minha raquete

Não está fazendo o som dos pontos e algumas vezes quando encosta na minha raquete, ela fica tremendo e emitindo som como um bug. Fiz algo de errado no cenário porque todos os detalhes de raquetes e bolinha estão ok porém as numerações não ficam bem no meu cenário. Me dá uma luz. Refaço tudo do zero ou não precisa?

12 respostas

Olá, Priscilla! Espero que esteja tudo bem com você.

É normal os bugs acontecerem, resolver problema faz parte da vida do desenvolvedor seja ele iniciante ou não. Certamente deve ser algo bem pequeno que ocorreu, mas para ter certeza eu preciso visualizar o seu código, tudo bem?

Você poderia compartilhar o seu código ou o link do seu projeto no P5?

É só copiar o link na barra de endereço e compartilhar aqui. Vou enviar uma imagem para ilustrar melhor:

linkdop5

Fico no aguardo, até breve :)

Oi Camila. Me desculpa, eu esqueci de dizer que era no Scracht. Consegui concluir, porém algumas numerações não ficaram idênticas as do Gui, mas deu certo. Acho que o P5 vai ser na próxima aula.

Oi, Priscilla!!

Fico muito feliz que tenha conseguido concluir seu projeto, esforço sempre é recompensado, parabéns! :)

Posso tentar ajudar você com essas questões de valores ou resultados diferentes no seu código.

Você poderia compartilhar seu projeto? Basta selecionar a opção "compartilhar" no canto superior do Scratch, copiar o link do projeto e colar aqui no forum mesmo

Fico no aguardo, um grande abraco e bons estudos!!! :)

Me ajuda sim. Acho que minha bolinha não está tocando na raquete do adversário. Já comecei a fazer no p5 e até agora, tudo bem. https://scratch.mit.edu/projects/543314672/

Bom dia, Estou com um problema semelhante, no meu caso a bolinha só não pontua quando bate na parte supeior (borda preta) da raquete do oponente, segue o código: https://editor.p5js.org/RDG_1988/sketches/TCPwI3ETc

Pode nos ajudar @Camila.pessoa

Fico no aguardo!

Olá, Rodrigo! Tudo bem?

Em primeiro lugar: parabéns pela mudança nas cores do placar, ficou muito bonito mesmo!!

Verifiquei seu código e fiz algumas alterações que funcionaram. Então vamos lá!

  • A primeira foi diminuir o diâmetro da bolinha (pois essa alteração no diâmetro vai impactar no raio e, consequente nos cálculos de colisão nas bordas e raquete).
let diametro= 25;
//mudei para
let diametro=15;
  1. Retirei as variáveis de velocidade X e y para bolinhaOponente (Temos apenas uma bolinha que se movimenta pelo eixo X e Y, por isso não precisamos de variáveis para bolinha oponente.
let velocidadexBolinhaop = 5;
let velocidadeyBolinhaop = 5;
//Retirei
  • Alterei um pouco a lógica da função toqueRaqueteop(). Como você pode verificar, alguns valores estavam fazendo referência ao lado esquerdo no plano cartesiano do p5 e foi por conta disso que a colisão não funcionou de forma apropriada. Sendo assim, inverti os valores para identificar o "lado do oponente"
//antes estava assim
function toqueRaqueteop(){
  if (xBolinha - raio < xRaqueteop + raqueteComprimento && yBolinha - raio < yRaqueteop + raqueteAltura && xBolinha + raio > xRaqueteop){
    velocidadexBolinha *=-1;
  }
}

//agora ficou assim
function toqueRaqueteop(){
  if (xBolinha + raio > xRaqueteop && yBolinha - raio < yRaqueteop + raqueteAltura && yBolinha + raio > yRaqueteop){
    velocidadexBolinha *=-1;
  }
}
  • Ah, também ajustei o posicionamento do eixo X da raquete para ficar mais equilibrado na tela de visualização
//ficou assim

let xRaqueteop = 580;
  • Alterei os valores da função marcaPonto() para identificar melhor a colisão
//Antes estava assim
function marcaPonto(){
  if (xBolinha > 585) {
    pontosCasa += 1;
  }
  if (xBolinha < 11){
    pontosFora += 1;
  }
} 

//Agora ficou assim:

function marcaPonto(){
  if (xBolinha > 590) {
    pontosCasa += 1;
  }
  if (xBolinha < 8){
    pontosFora += 1;
  }
} 

O código completo ficou dessa forma

Você pode copiar e testar no seu p5 para verificar o resultado

//Variaveis da Bolinha
let xBolinha=300;
let yBolinha=200;
let diametro=15;

//Variaveis da velocidade
let velocidadexBolinha = 5;
let velocidadeyBolinha = 5;
let raio = diametro / 2;

//Variaveis da Raquete
let xRaquete = 5;
let yRaquete = 150;
let raqueteComprimento = 10;
let raqueteAltura = 100;

//Variaveis da Raquete Oponente
let xRaqueteop = 580;
let yRaqueteop = 150;
//let velocidadexBolinhaop = 5;
//let velocidadeyBolinhaop = 5;

//Variaveis de pontos
let pontosCasa = 0;
let pontosFora = 0;

function setup() {
  createCanvas(600, 400);
}

function draw() {
  background(0);
  mostraBolinha();
  movimentaBolinha();
  verificaBorda();
  mostraRaquete(xRaquete,yRaquete);
  mostraRaquete(xRaqueteop, yRaqueteop);
  movimentaRaquete();
  movimentaRaqueteop();
  toqueRaquete();
  toqueRaqueteop();
  incluiPlacar();
  marcaPonto();
}


function mostraBolinha(){
  circle(xBolinha, yBolinha, diametro);
}

function movimentaBolinha(){
  xBolinha += velocidadexBolinha;
  yBolinha += velocidadeyBolinha;
}

function verificaBorda(){
  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, raqueteComprimento, raqueteAltura);
}

function movimentaRaquete(){
  if (keyIsDown(UP_ARROW)){
    yRaquete -= 10;
  }
  if (keyIsDown(DOWN_ARROW)){
    yRaquete += 10;
  }
}

function toqueRaquete(){
  if (xBolinha - raio < xRaquete + raqueteComprimento && yBolinha - raio < yRaquete + raqueteAltura && yBolinha + raio > yRaquete ){
    velocidadexBolinha *=-1;
  }
}

function toqueRaqueteop(){
  if (xBolinha + raio > xRaqueteop && yBolinha - raio < yRaqueteop + raqueteAltura && yBolinha + raio > yRaqueteop){
    velocidadexBolinha *=-1;
  }
}

function movimentaRaqueteop(){
    velocidadeyBolinhaop = yBolinha - yRaqueteop - raqueteComprimento / 2 -30;
  yRaqueteop += velocidadeyBolinhaop
}

function incluiPlacar(){
  stroke(255)
  textAlign(CENTER);
  textSize(18);
  fill(color(50, 0, 190));
  rect(150, 10, 40, 20);
  fill(255);
  text(pontosCasa, 170, 26);
  fill(color(50, 0, 195));
  rect(450, 10, 40, 20);
  fill(255);
  text(pontosFora, 470, 26);
}

function marcaPonto(){
  if (xBolinha > 590) {
    pontosCasa += 1;
  }
  if (xBolinha < 8){
    pontosFora += 1;
  }
} 

Se as dúvidas persistirem, você pode abrir um novo tópico no Fórum que vou procurar explicar com mais detalhes (inclusive sobre o plano cartesiano, os eixos x e y, do P5).

Espero que tenha ajudado, um abraço e bons estudos :)

Priscilla, boa tarde!

Seu projeto não aparece para mim, acredito que você precise compartilhá-lo para deixá-lo em modo público.

Para permitir a visualização de seu projeto, basta você clicar no botão compartilhar, que fica no canto superior do Scratch. Vou enviar uma imagem para ilustrar melhor.

Botao Compartilhar no Scratch

Depois de ter compartilhado é só avisar aqui que vou conseguir visualizá-lo.

Até breve e fico no aguardo! :)

Olá Camila,

Obrigado pela ajuda nos apontamentos, eu achei também que era apenas ajustes de parâmetros mesmo, tentei quase tudo, menos o diametro da Bolinha. Vou colocar o som no jogo e dar continuidade no aprendizado.

Obrigado!!

Oi Camila. Na minha tela não aparece esse comando de compartilhamento. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olá, Priscilla.

Vamos lá, normalmente isso ocorre porque você não confirmou o Scratch pelo seu email. Vou enviar um vídeo do Youtube que ensina a fazer a confirmação do cadastro do Scratch via email.

https://www.youtube.com/watch?v=nmi1vPZL1H0

Depois disso você verifica se consegue compartilhar o projeto, tudo bem?

Fico no aguardo! :)

Oi Camila, consegui.

Olá, Priscilla! Que bom, assim vamos poder visualizar seus projetos e você poderá compartilhar com toda a comunidade :)

Observei seu código e projeto e fiz apenas algumas modificações.

O som da colisão da raquete com a bolinha estava funcionando, o problema é que não havia colisão da bolinha com a raquete do oponente. Então apenas diminui um pouco o valor para que o delay ficasse menor e a colisão com mais aleatoriedade.

Olha só no código, apenas modifiquei de 50 para 30 a subtração da posição y e valor:

IMinha bolinha Scratch

Outra coisa que modifiquei foi o posicionamento das raquetes, o que diminuiu um pouco o bug da bolinha ficar presa entre a raquete. Só posicionei um pouquinho mais distante das bordas, o código ficou assim:

Essa é a raquete do Oponente

Raquete Oponente, eixo x e y

E essa foi a modificação na raquete do Jogador (Minha Raquete). Apenas alterei o valor de x para -225:

Minha Raquete no Scratch


Um outro detalhe muito importante e que às vezes passa pela gente é no momento em que vamos desenhar um ator/sprite . A área de desenho do Scratch possui um ponto central (assim como a área de visualização do nosso jogo).

Nesse sentido, precisamos posicionar nosso ator/sprite no ponto central da área de desenho para que nosso jogo tenha maior precisão.

A sua raquete, como podemos observar na figura abaixo, estava um pouco deslocada do ponto central, o que gerava alguns problemas no momento de correspondência de valores. Raquete fora do ponto central

Como consertar isso?

Para ajustarmos os problemas, basta posicionarmos o nosso desenho no ponto central (que parece um alvo) na área de desenho. Vou deixar uma imagem para você visualizar melhor: Posicionamento no ponto centralAo colocarmos o ator/sprite no ponto central, temos maior controle de seu posicionamento na área de visualização do jogo. :)

Vou deixar também o link com o remix do seu projeto e as modificações aqui: https://scratch.mit.edu/projects/546902214/

Espero que esses apontamentos tenham ajudado você.

Adorei o seu projeto e aguardo ansiosa para acompanhar seu desenvolvimento.

Um super abraço e bons estudos!!