Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Erro

Usei os códigos que um professor me passou no jogo para criar um sistema de recorde e para paralizar o ator por 2seg depois que o ponto é marcado (para que eu não colida com o carro da primeira faixa sem querer). Quando o meu ator "morre" eu programei para que a minha pontuação fosse zerada e não diminuida, então toda vez que a pontuação zera o recorde está lá bonitinho, mas ao fazer um ponto denovo também acrescenta um no recorde mesmo que a pontuação esteja menor. A função do ator imóvel não funcionou também, o ator não fica parado após marcar um ponto, não sei o que há de errado. Link do meu jogo abaixo: https://editor.p5js.org/narutouzumaki00159/sketches/EJ_HgeyvR Obs: Perdão tinha marcado como solucionado no tópico anterior sem querer, e tb não programei o jogo com as mesmas palavras que o professor, mas os comandos são os mesmos.

1 resposta
solução!

Oi, Lucas

Fiz uns pequenos ajustes 🤓

  • sketch.js

function setup() {
  createCanvas(500, 400);
  for(let i = 0; i < carImage.length; i++){
    carType.push(carImage[i]);
  }    
  noLoop();  
}

function draw() {
  background(roadImage);
  showActor()
  moveActor()
  showCar()
  moveCar()
  loopCars()
  verifyCollision()
  scorePoints()
  showPoints()
  limits()
  showRecord() 
  iniciaJogo()
}

function limits(){
  if (xActor < 0){
    xActor = 0
  }
  if (xActor > 470){
    xActor = 470
  }
}

// Pausa e Inicia o Jogo
let jogoParado = true;
let textoJogo = "Click para Iniciar";

function mouseReleased() 
{
  if (jogoParado) {
    jogoParado = false;
    loop();
    theme.play();    
  } else {    
    textoJogo = "Click para continuar";
    jogoParado = true;    
  }  
}

function iniciaJogo()
{
  if (jogoParado) {
    textAlign(CENTER);
    textSize(50);
    fill(color(0, 0, 0));
    text(textoJogo, width /2, height/2);
    theme.stop();
    noLoop();    
  }   
}
  • actor.js
//Actor variables
let xActor = 100;
let yActor = 366;
let collision = false
let points = 0;
let record = 0;
let atorImovel = false;

function showActor(){
  image(actor ,xActor , yActor, 40, 40);
  yActor = constrain (yActor, -100, 366)
}

function moveActor(){
  if (keyIsDown(UP_ARROW) && !atorImovel)    yActor -= 4;
  if (keyIsDown(DOWN_ARROW) && !atorImovel)  yActor += 4;
  if (keyIsDown(LEFT_ARROW) && !atorImovel)  xActor -= 3.7;
  if (keyIsDown(RIGHT_ARROW) && !atorImovel) xActor += 3.7;
}

function verifyCollision(){
  for (let = i = 0; i < carImage.length; i = i + 1){
    collision = collideRectCircle(xCar[i], yCar[i], carWidth, carHeight, xActor + 20, yActor + 20, 15);
    if(collision){
      collided();
      collisionSound.play();
    }
  }
}

function collided(){
  yActor = 366
  points = 0
  textoJogo = "Click para novo";
  jogoParado = true; 
}

function scorePoints(){
  if (yActor < 2) {
    points++;
    scoreSound.play();  
    yActor = 366;
    atorImovel = true;
    setTimeout(function() {
      atorImovel = false;
    }, 2000);
  }
}

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

function showRecord(){
  textAlign(CENTER);
  textSize(25);
  fill(color(0, 0, 255));
  record = (points > record)? points: record;  
  text(record, 400, 27);
}

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