1
resposta

TRAVAMENTO no P5.JS

Estou com uma dificuldade em terminar a atividade Jogos Classicos parte 2. Há um travamento sem apontar o erro. https://editor.p5js.org/danilo.ss/sketches/t9awIGS0z

1 resposta

Olá Danilo, tudo bem? espero que sim.

Desde já gostaria de agradecer a paciência em aguardar uma resposta.

Analisando seu game e vasculhando, encontro o bug na função verificaColisao no arquivo ator.js há um erro na sua escrita do código que gera o travamento, como podemos observar:

function verificaColisao(){
  //collideRectCircle(x1, y1, width1, height1, cx, cy, diameter)
  for (let i = 0; i < imagemCarro.length; i = i++){ //o erro do travamento se encontra aqui.
//resto da função…

motivo do erro

O valor de iele é responsável por controlar o for, na sua lógica o i = i++ o que gera bugs, você pode usar o operador de incremento que é "++" ficando ì++ ou de outra forma, usando i = i + 1 ambos funcionam mais a melhor prática é usar o i++sua função com as correções.

function verificaColisao(){
  //collideRectCircle(x1, y1, width1, height1, cx, cy, diameter)
  for (let i = 0; i < imagemCarro.length; i = i++){
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 15)
      if(colisao){
      voltaAtorParaPosicaoInicial();
      somDaColisao.play();  
      if (pontosMaiorQueZero){
      meusPontos -= 1;  
      }
    }
  }
}

Seu código passou pelo BOSS agora vamos passar por bugs mais fáceis rsrs,

Vamos colocar a função feita em aula que estava faltando em seu código, que é a voltaAtorParaPosicaoInicial no arquivo ator.js:

function voltaAtorParaPosicaoInicial(){
  yAtor = 366;
}

Há outras pequenas correções em seu código como fechamento de () em algumas funções chamadas por ti, deixo o código completo.

//código do ator

let xAtor = 85;
let yAtor = 366;
let colisao = false;
let meusPontos = 0;


function mostraAtor(){
image(imagemDoAtor, xAtor, yAtor, 30,30);
}

function movimentaAtor(){
  if (keyIsDown(UP_ARROW)){
    yAtor -= 3;
  }
  if (keyIsDown(DOWN_ARROW)){
    if(podeSeMover()){
    yAtor += 3;
    }
  }
}

function verificaColisao(){
  //collideRectCircle(x1, y1, width1, height1, cx, cy, diameter)
  for (let i = 0; i < imagemCarro.length; i++){
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 15)
    if (colisao){
      somDaColisao.play();
      voltaAtorParaPosicaoInicial();
    if(pontosMaiorQueZero()){
    meusPontos -= 1;
    }
    }
  }
}


function colidiu (){
  yAtor = 366}


function incluiPontos(){
  textAlign (CENTER);
  textSize (25)
  fill(color(255,240,60))
  text(meusPontos, width / 5, 27 )
} 

  function marcaPonto(){
  if (yAtor < 15){
  meusPontos += 1
  somDoPonto.play();
  voltaAtorParaPosicaoInicial();
  }  
}


function pontosMaiorQueZero(){
  return meusPontos > 0
}

function podeSeMover(){
  return yAtor < 366;

}
function voltaAtorParaPosicaoInicial(){
  yAtor = 366;
}

Depois é só arrumar a funtion draw() no arquivo sketch.js;

 function draw() {
  background(imagemDaEstrada);
  mostraAtor();
  mostraCarro();
  movimentaCarro();
  movimentaAtor();
  voltaPosicaoInicialDoCarro();
  verificaColisao();
  incluiPontos();
  marcaPonto();
}

Deste modo o seu game volta a funcionar normalmente, continue se esforçando e estudando, um grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!