Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Adicionar Velocidade aos Carros

Ola pessoal,

Temrinei o curso e quis fazer um desafio, mas acabei travado.

Se eu quiser aumentar a velocidade dos carros a cada ponto ganho. Como se fosse um Level diferente a cada ponto. Como faria?

Tentei usar um if, porem ao fazer o ponto, o jogo acabou travando.

6 respostas

você pode criar uma function para incrementar um valor a uma variável conforme aumentam os pontos, e essa variável estar vinculada ao deslocamento do carro.


let velocidadeAdicionalCarros = 0;

function maisVelocidade() {
    if (yJogador < 20) {
        velocidadeAdicionalCarros += "quantidade de velocidade que você quer colocar"; 
        //(pode usar velocidadeAdicionalCarros++ se for adicionar somente 1)
    }
}

//ai dentro da function de movimento do carro você pode colocar assim 

function blablabla() {
        xCarros = xCarros - velocidadeCarros - velocidadeAdicionalCarros;  
        //(negativo por que o carro está indo para a esquerda)

        //(ou 
        //xCarros -= velocidadeCarros + velocidadeAdicionalCarros)

}

A parte de aumentar a velocidade funcionou. Mas egostaria de fazer ela aumentar toda vez que + um ponto fosse connquistado, assim criando niveis de dificuldade, e quando o personagem fosse atingido e voltasse ao 0, a velocidade tambem voltasse a original.

Tentei mudar o if (yJogador < 20) para os pontos, mas ele vai aumentando sem parar a velocidade.

Por exemplo, gostaria quando estivessem 0 pontos a velocidade fosse X

0 pontos = x 1 ponto = x+1 2 pontos = x+2

e assim por diante

é só você colocar onde "marca" os pontos um: velocidadeAdicionalCarros += "quantidade de velocidade que você quer colocar";

sem precisar colocar o if, ai tova vez que marcar um ponto, ele vai dar um incremento na velocidade e para zerar a velocidade, onde tem a condicional de colisão, quando colidir, vc coloca um reset de velocidade com por exemplo: velocidadeAdicionalCarros = 1

ai para fazer essa questão do X é só você trocar o incremento pôr por exemplo: velocidadeAdicionalCarros = X * meusPontos;

Mil desculpas, mas ainda nao compreendi onde devo colocar esse codigo.

No momento meu codigo esta assim:

Carro.js

//variaveis carro
let yCarros = [40, 96, 150, 210, 270, 318];
let velocidadeCarros = [4.5, 5, 4, 3.5, 2, 3];
let xCarros = [600, 600, 600, 600, 600, 600];
let comprimentoCarro = 50;
let alturaCarro = 40;


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

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

}

function voltaPosicaoCarro(){
  for (let i = 0; i < imagemCarros.length; i++){
    if (verificacaoTela(xCarros[i])){
    xCarros[i] = 600;
    }
  }
}

function verificacaoTela(xCarro){
  return xCarro < - 50 ; 
}


let velocidadeAdicionalCarros = 0;


//Esta assim so para teste
function maisVelocidade() {
    if (yPersonagem < 366) {
        velocidadeAdicionalCarros += 0.1; 
    }
}

Personagem.js

//variaveis personagem
let yPersonagem = 367;
let xPersonagem = 85;
let colisao = false;
let pontos = 0;

function mostraPersonagem(){
  image(imagemPersonagem, xPersonagem,yPersonagem, 30, 30);
}

function movimentaPersonagem(){
  if (keyIsDown(UP_ARROW)){
    yPersonagem -= 3
  }
  if (keyIsDown(DOWN_ARROW)){
    if(yForaTela()){
    yPersonagem += 3
    }
  }
}

function verificaColisao(){
  for (let i = 0; i < imagemCarros.length; i++){
    colisao = collideRectCircle(xCarros[i], yCarros[i],comprimentoCarro, alturaCarro, xPersonagem, yPersonagem, 15)
    if(colisao){
      somColisao.play();
      voltaPersonagem();
      if(pontosPositivos()){
        pontos -= 1;
      }
    }
  }  
}

function voltaPersonagem(){
  yPersonagem = 366;
}

function mostraPontos(){
  fill(color(240,255,0));
  textAlign(CENTER);
  textSize(25);
  text(pontos, width / 5, 27);
}

function marcaPontos(){
  if (yPersonagem < 15){
    pontos +=1;
    voltaPersonagem();
    somPonto.play();
  }

}

function pontosPositivos(){
  return pontos > 0;
}

function yForaTela(){
  return yPersonagem < 367;
}
solução!

Coloquei em comentário o que eu adicionei, pra funcionar é só tirar as barras

//variaveis carro
let yCarros = [40, 96, 150, 210, 270, 318];
let velocidadeCarros = [4.5, 5, 4, 3.5, 2, 3];
//let velocidadeAdicionalCarros = 1;
let xCarros = [600, 600, 600, 600, 600, 600];
let comprimentoCarro = 50;
let alturaCarro = 40;


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

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

}

function voltaPosicaoCarro(){
  for (let i = 0; i < imagemCarros.length; i++){
    if (verificacaoTela(xCarros[i])){
    xCarros[i] = 600;
    }
  }
}

function verificacaoTela(xCarro){
  return xCarro < - 50 ; 
}


//variaveis personagem
let yPersonagem = 367;
let xPersonagem = 85;
let colisao = false;
let pontos = 0;

function mostraPersonagem(){
  image(imagemPersonagem, xPersonagem,yPersonagem, 30, 30);
}

function movimentaPersonagem(){
  if (keyIsDown(UP_ARROW)){
    yPersonagem -= 3
  }
  if (keyIsDown(DOWN_ARROW)){
    if(yForaTela()){
    yPersonagem += 3
    }
  }
}

function verificaColisao(){
  for (let i = 0; i < imagemCarros.length; i++){
    colisao = collideRectCircle(xCarros[i], yCarros[i],comprimentoCarro, alturaCarro, xPersonagem, yPersonagem, 15)
    if(colisao){
      somColisao.play();
      voltaPersonagem();
      if(pontosPositivos()){
        pontos -= 1;
        //velocidadeAdicionalCarros -= 1;
      }
    }
  }  
}

function voltaPersonagem(){
  yPersonagem = 366;
}

function mostraPontos(){
  fill(color(240,255,0));
  textAlign(CENTER);
  textSize(25);
  text(pontos, width / 5, 27);
}

function marcaPontos(){
  if (yPersonagem < 15){
    pontos +=1;
    //velocidadeAdicionalCarros += 1;
    voltaPersonagem();
    somPonto.play();
  }

}

function pontosPositivos(){
  return pontos > 0;
}

function yForaTela(){
  return yPersonagem < 367;
}

Muito obrigado! Agora deu certo