Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Funções não declaradas no "sketch.js" e o uso ou não do "return"

-> sketch.js:

function setup() {
  createCanvas(500, 400);
  somDaTrilha.loop();
}

function draw() {
  background(imagemEstrada);
  mostraCarro();
  mostraAtor();
  movimentaCarro();
  movimentaAtor();
  carrosVoltamPosicaoInicial();
  aconteceuColisao();
  aparecePlacar();
  conseguiuAtravessar();
}

-> ator.js:

// ator:
let xAtor = 100;
let yAtor = 366;
let colisao = false;
let meusPontos = 0;

function mostraAtor() {
  image(imagemAtor, xAtor, yAtor, 30, 30);

}

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

  if(keyIsDown(DOWN_ARROW)) {
    if (podeSeMover()){ 
      yAtor += 3;
    } 
  }
}

function aconteceuColisao(){
  for (let i = 0; i < imagemCarros.length; i++){
    //collideRectCircle(x1, y1, width1, height1, cx, cy, diameter)
    colisao = collideRectCircle (xCarros[i], yCarros[i], comprimento, altura, xAtor, yAtor, 15);
    if (colisao){
      somDaColisao.play();
      voltaParaPosicaoInicial();
      if (meusPontosMaiorQueZero()){
      meusPontos -= 1;

      }
    }
  }
}

function voltaParaPosicaoInicial(){
  yAtor = 366;
}

function aparecePlacar(){
  fill(255,254,0);
  textSize(25);
  textAlign(CENTER);
  text(meusPontos, width/5, 25);
}

function conseguiuAtravessar(){
  if ( yAtor < 15){
    meusPontos += 1
    somDosPontos.play();
    voltaParaPosicaoInicial();
  }
}

function meusPontosMaiorQueZero(){
  return meusPontos > 0
}

function podeSeMover(){
  return yAtor < 366
}

Tenho 2 dúvidas em relação aos códigos.

1) Não entendi muito bem o porque que as funções "voltaParaPosicaoInicial() ", "meusPontosMaiorQueZero()" e "podeSeMover()" não precisaram ser declaradas no "sketch.js" para funcionar.

2) Porque que em algumas dessas funções (citadas acima), eu coloco "return" e em outras não.

Obrigado.

5 respostas

Fala ai Pedro, tudo bem? Vamos lá:

Não entendi muito bem o porque que as funções "voltaParaPosicaoInicial() ", "meusPontosMaiorQueZero()" e "podeSeMover()" não precisaram ser declaradas no "sketch.js" para funcionar.

Elas não precisam ser declaradas no sketch.js porque provavelmente no HTML você importou o arquivo ator.js antes do sketch.js.

Sendo assim, o JavaScript já conhece elas e ambas podem ser utilizadas a partir da importação do ator.js para baixo.

Porque que em algumas dessas funções (citadas acima), eu coloco "return" e em outras não.

As funções que possuem o return é porque precisam retornar algum valor que vai ser utilizado para quem a está chamando.

Espero ter ajudado.

" **Elas não precisam ser declaradas no sketch.js porque provavelmente no HTML você importou o arquivo ator.js antes do sketch.js.

Sendo assim, o JavaScript já conhece elas e ambas podem ser utilizadas a partir da importação do ator.js para baixo.**"

Mas existem várias outras funções que precisaram ser declaradas no sketch.js para funcionarem, caso contrário, não funcionavam. Ex: aparecePlacar(); conseguiuAtravessar();

Em relação ao return, porque então não colocou um return na função voltaParaPosicaoInicial();?

Outra coisa, como faço para editar o texto igual o seu? Marcando a mensagem da pessoa e dando destaque pra algumas palavras do código? hehehe

Mas existem várias outras funções que precisaram ser declaradas no sketch.js para funcionarem, caso contrário, não funcionavam. Ex: aparecePlacar(); conseguiuAtravessar();

Ai eu precisaria ver o arquivo completo, pois, no seu exemplo apenas possui as funções setup e draw (vulgo do p5).

Em relação ao return, porque então não colocou um return na função voltaParaPosicaoInicial();?

Porque não é necessário, ele mexe na posição diretamente dentro da função, sendo assim, não se faz necessário nenhum retorno, apenas alterar a variável yAtor é o suficiente para mandá-lo para o inicio.

Outra coisa, como faço para editar o texto igual o seu? Marcando a mensagem da pessoa e dando destaque pra algumas palavras do código? hehehe

Para isso pode estar utilizando os recursos do MarkDown:

https://guides.github.com/features/mastering-markdown/

Espero ter ajudado.

Ai eu precisaria ver o arquivo completo, pois, no seu exemplo apenas possui as funções setup e draw (vulgo do p5).

O arquivo completo está aqui

E estou aprendendo a utilizar o Markdown. Valeu d+!

solução

Fala ai Pedro, tudo bem? Bom, está bem estranho:

<script src="sketch.js"></script>
<script src="imagens.js"></script>
<script src="ator.js"></script>
<script src="carros.js"></script>
<script src="p5.collide2d.js"></script>

Essa é a ordem de importação dos seus script's, mas, como o sketch usa funções do ator e demais arquivos, ele deveria ser importando depois deles.

Acredito que o P5 Web apenas executa as funções setup e draw depois de baixar todos os arquivos .js.

Porque após baixá-los, o browser irá entender as funções globais.

Espero ter ajudado.