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
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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
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…
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!