8
respostas

Countdown no Freeway

Alguem sabe como criar uma função que condicione a movimentação do ator ao termino de um countdown que apareca na tela? Se sim, compartilha ai por favor!

8 respostas

Oi, Túlio

Crie uma variável para definir o tempo

// ator.js

let tempoJogo = 20; // defina do tempo em segundos

Crie a função countdown

// ator.js

function countdown(){  
  let frames = getFrameRate(); // o padrao é 60 frames por segundo
  tempoJogo -= 1/frames;
  if ( tempoJogo <= 0 ) {
   colidiu();     
   tempoJogo = 20; // retorna ao valor definido
  }
}

Insira o texto na tela

// ator.js

function pontucacao(){
  // ...
  fill(color(0,0,0));
  text( parseInt(tempoJogo), width/4 * 2, 25); 
}

Insira a função countdown em "draw()"

// sketch.js

function draw() {
  // ...
  countdown();
}

Olá, Luis. Desculpa a minha burrice, mas não consegui aplicar o código que você mandou. Tentei adaptar ao que eu tinha e surgiu um erro na linha correspondente ao colidiu(); que no meu projeto esta como: colisao();

function pontucacao(){

  fill(color(0,0,0));
  text( parseInt(tempoJogo), width/4 * 2, 25);
}

function countdown() {

  let frames = getFrameRate(); // o padrao é 60 frames por segundo
  tempoJogo -= 1/frames;
  if ( tempoJogo <= 0 ) {
   colisao();     
   tempoJogo = 5; // retorna ao valor definido
  }
}

var tempoJogo = 5; // defina do tempo em segundos

Oi,

Seguindo os nomes usados que foram usados na transcrição da aula - Perdendo pontos

Troque colisao() para voltaAtorParaPosicaoInicial()

Coloque o texto do Tempo na function incluiPontos()


// verifique se o draw() chama esta função
function incluiPontos() {    
    // não apague o conteúdo
   // apenas insira estas 2 linhas
    fill(color(0,0,0));  //cor do texto
    text( parseInt(tempoJogo), width/4 * 2, 25);  // texto e posição na tela
}

Se não funcionar, coloque o seu código sketch.js e ator.js aqui

Salve, Luis. Desculpe a demora a responder. Depois das alterações o countdown está funcionando o problema é que ele não para de contar, entende? Eu queria que ele funcionando só uma vez ao abrir o jogo. Segue o meu código abaixo!

function movimentaAtor() {

    if (keyIsDown(UP_ARROW)) {
      yAtor -= 3;
    }
    if (keyIsDown(DOWN_ARROW)) {
      yAtor += 3;
    }
//    if (keyIsDown()) {
//    xAtor -= 3;
//  }
//  if (keyIsDown()) {
//    xAtor += 3;
//  }
}

function mostraAtor() {

  image(imagemAtor, xAtor, yAtor, 23, 23);
}

function verificaColisao() {

  for (let i = 0; i < 3; i++){
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 11)
    if (colisao){
      reiniciar();
      somColisao.play();
      if (pontosPositivos()){
       pontos -= 1;
      }
    }
  }
  for (let v = 3; v < 6; v++){
    colisao = collideRectCircle(xCarros[v], yCarros[v], comprimentoCarro, alturaCarro, xAtor, yAtor, 11)
    if (colisao){
      reiniciar();
      somColisao.play();
      if (pontosPositivos()){
       pontos -= 1;
      }
    }
  }
}

function reiniciar() {

  yAtor = 370;
}

function mostrarPontos() {

  textAlign(CENTER);
  textSize(25);
  fill(color(255, 0, 255));
  text(pontos, width / 5, 27);
  textSize(85);
  fill(color(0,0,0));
  text( parseInt(tempoJogo), width/4 * 2, height/4 * 2 + 25); 
}

function pontosPositivos() {

  return pontos > 0
}

function addPontos() {

  if (yAtor < 15){
    pontos += 1;
    somPonto.play();
    reiniciar();
  }
}

function restringirMoviment() {

  return yAtor < 370;
}

function pontosPositivos() {

  return pontos > 0
}

function countdown() {

  var frames = getFrameRate(); // o padrao é 60 frames por segundo
  tempoJogo -= 1/frames;
  if ( tempoJogo <= 0 ) {
    reiniciar();
    iniciar = true;
    tempoJogo = 5;
  }
}



var xAtor = 250;
var yAtor = 370;
var colisao = false;
var pontos = 0;
var tempoJogo = 5;

Sketch.js:

function setup() {

  createCanvas(500, 400);
  somTrilha.loop(0,1,0.2);
}

function draw() {

  background(imagemEstrada);
  mostraAtor();
  mostraCarros();
  movimentaCarros();
  movimentaAtor();
  loopPosicao();
  verificaColisao();
  mostrarPontos();
  addPontos();
  countdown();
}

Oi, Túlio

Eu entendi errado

Eu pensei que você queria um tempo limite para atravessar a rua

Se o tempo acabar, volta para o início

Veja agora se te atende


let xAtor = 250;
let yAtor = 370;
let colisao = false;
let pontos = 0;
let tempoJogo = 5; // tempo em segundos
let textoInicio;
let ficarParado = true

function movimentaAtor() {
    if ( ficarParado ) return;

    if (keyIsDown(UP_ARROW)) yAtor -= 3;    
    if (keyIsDown(DOWN_ARROW))  yAtor += 3;    
     if (keyIsDown(LEFT_ARROW)) xAtor -= 3;  
     if (keyIsDown(RIGHT_ARROW)) xAtor += 3;
}

function mostraAtor() {
  image(imagemAtor, xAtor, yAtor, 23, 23);
}

function verificaColisao() {

  for (let i = 0; i < 3; i++){
    colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 11)
    if (colisao){
      reiniciar();
      somColisao.play();
      if (pontosPositivos()){
       pontos -= 1;
      }
    }
  }
  for (let v = 3; v < 6; v++){
    colisao = collideRectCircle(xCarros[v], yCarros[v], comprimentoCarro, alturaCarro, xAtor, yAtor, 11)
    if (colisao){
      reiniciar();
      somColisao.play();
      if (pontosPositivos()){
       pontos -= 1;
      }
    }
  }
}

function reiniciar() {     
  yAtor = 370;
  xAtor = 250;
  // opcional colocar o tempo aqui
  ficarParado = true 
  tempoJogo = 5    
}

function mostrarPontos() {
  textAlign(CENTER);
  textSize(25);
  fill(color(255, 0, 255));
  text(pontos, width / 5, 27);
  textSize(85);
  fill(color(0,0,0));
  text( textoInicio, width/4 * 1, height/4 * 2 + 25); 
}

function pontosPositivos() {
  return pontos > 0
}

function addPontos() {
  if (yAtor < 15){
    pontos += 1;
    somPonto.play();
    reiniciar();
  }
}

function restringirMoviment() {
  return yAtor < 370;
}

function pontosPositivos() {
  return pontos > 0
}

function countdown() {  
  tempoJogo -= 1/60;
  if ( tempoJogo > 0 ) 
    textoInicio = parseInt(tempoJogo) + " segundos para iniciar"
  else {
    ficarParado = false;
    textoInicio = ''
  }
}




Show irmão. Ficou perfeito. Muito obrigado mesmo!