4
respostas

No print, mostra que Ator colide com Carros, mas Ator não volta para o início - tentei outros tópicos do forum e nada

Olá!

Mesmo os outros tópicos do fórum não me ajudaram a entender o motivo de eu não estar conseguindo fazer a colisão entre ator e carros com o ator voltando para o início.

Eis o código completo:

let imagemDaEstrada; let imagemDoAtor; let imagemCarro1; let imagemCarro2; let imagemCarro3;

// código dos carros let xCarros = [600, 600, 600]; let yCarros = [40, 96, 150]; let velocidadeCarros = [2, 3.2, 2.5]; let comprimentoDosCarros = 50; let alturaDosCarros = 40;

// ator let xAtor = 100; let yAtor = 366; let colisao = false;

function preload(){ imagemDaEstrada = loadImage ("imagens/estrada.png"); imagemDoAtor = loadImage ("imagens/ator-1.png"); imagemCarro1 = loadImage ("imagens/carro-1.png"); imagemCarro2 = loadImage ("imagens/carro-2.png"); imagemCarro3 = loadImage ("imagens/carro-3.png"); imagemCarros = [imagemCarro1, imagemCarro2, imagemCarro3]; }

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

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

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

function mostraCarro(){ for (let i = 0; i < imagemCarros.length; i++){ image(imagemCarros[i], xCarros[i], yCarros[i], 50, 40); } }

function movimentaCarro(){ for (let i = 0; i < imagemCarros.length; i++){ xCarros[i] -= velocidadeCarros[i]; } }

function voltaPosicaoInicialDoCarro(){ for (let i = 0; i < imagemCarros.length; i++){ if (xCarros[i] < -50){ xCarros[i] = 600 } } } function movimentaAtor(){ if (keyIsDown(UP_ARROW)){ yAtor -= 3; } if (keyIsDown(DOWN_ARROW)){ yAtor += 3; } }

function verificaColisao (){ for (let i = 0; i < imagemCarros.length; i++){ colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoDosCarros, alturaDosCarros, xAtor, yAtor, 15); if (colisao){ colidiu; } } }

function colidiu(){ yAtor = 366; }

Espero ajuda de alguém. Obrigada!

4 respostas

olá Ingrid, o problema provavelmente esta no final da função verificaColisão e na função colidiu:

function verificaColisao (){ for (let i = 0; i < imagemCarros.length; i++){ colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoDosCarros, alturaDosCarros, xAtor, yAtor, 15); /* if (colisao){ colidiu; }*/ } }

/*function colidiu(){ yAtor = 366; }*/
`

experimenta utilizar a função dessa forma:

function verificaColisao(){

 for( var i = 0; i < carros.length; i += 1){
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xVaca, yVaca, 10)

 if (colisao){ colidiu.play();
     voltaAtorParaPosicaoInicial();
    }

    function voltaAtorParaPosicaoInicial(){
  xAtor = 50;


}

A função " voltaAtorParaPosiçãoInicial " só é chamada dentro da função "verificaColisão" e na função que marca o placar, sé você chamar ela no" draw " "o jogo vai dar erro.

Olá, boa noite!

Fiz como me orientou, contudo, aparece esse erro no p5.js:

"p5.js says: [sketch.js, line 84] "colidiu" is not defined in the current scope. If you have defined it in your code, you should check its scope, spelling, and letter-casing (JavaScript is case-sensitive).

Como resolver, pois não estou entendendo mais nada rsss

Mais uma vez, obrigada!

olá, você conseguiu resolver o problema no seu código?

Consegui, mas não com a ajuda por aqui. Obrigada por perguntar :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software