6
respostas

Troca de atores ao realizar movimento.

Boa tarde pessoal, estou tentando criar um jogo um pouco mais personalizado e tive a ideia de trocar o ator quando pressionado as teclas para cima e para baixo, para dar uma ideia maior de movimento. Tive a ideia de criar uma variável "parado" começando em true e adicionando-a como parâmetro na função "mostraAtor". Para que assim pudesse negá-la ao executar a função "mostraAtorMovimento" com "parado = false" e as imagens não se sobrepusessem. Deu certo, quando me movimento o ator parado some e o que da ideia de movimento surge, o problema é que o ator parado não volta depois que solto a tecla. Alguma ideia de como fazer funcionar?

Segue o código mencionado:

var xAtor = 85;
var yAtor = 370;
var colisao = false;

var parado = true;

var meusPontos = 0;

function mostraAtor() {
  if (parado) {
    image(imagemAtor, xAtor, yAtor, 50, 55);
  }
}

function mostraAtorMovimento() {
  image(imagemAtorMovimento, xAtor, yAtor, 50, 55);
}


function movimentaAtor() {
  if (keyIsDown(UP_ARROW)) {
    parado = false;
    mostraAtorMovimento();
    yAtor -= 3;
  }
  if (keyIsDown(DOWN_ARROW)) {
    parado = false;
    mostraAtorMovimento();
    yAtor += 3;
  }

}

function verificaColisao() {
  // collideRectRect(x, y, width, height, x2, y2, width2, height2 )
  for (var i = 0; i < imagemCarros.length; i++) {
    colisao = collideRectRect(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 50, 50);
    if (colisao) {
      voltaAtorParaPosicaoInicial();
      somDaColisao.play();
      if (pontosMaiorQueZero()) {
        meusPontos -= 1;
      }
    }
  }
}

function voltaAtorParaPosicaoInicial() {
  yAtor = 370;
}

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

function marcaPonto() {
  if (yAtor < -23) {
    meusPontos += 1;
    somDoPonto.play();
    voltaAtorParaPosicaoInicial();
  }
}

function pontosMaiorQueZero() {
  return (meusPontos > 0)
}
6 respostas

Em suas funções, tente voltar o parado = true;

Quando faço isso ficam as duas imagens sobrepostas. =(

mas entao. Vc tem que ativar o parado e desativar o outro.

Um sempre vai ter que estar o oposto do outro.

Ai provavelmente vai ter que desenvolver uma funcao igual a

voltaAtorParaPosicaoInicial, ou algo do tipo..

tem algum lugar online que execute seu codigo?

Tentei fazer isso e o personagem nem saiu do lugar, acho que to quebrando demais a cabeça kkkk. O link pra execução e edição do código é: https://editor.p5js.org/vitor.borgatte/sketches/MBk1Lykxo

// ator
var xAtor = 85;
var yAtor = 370;
var colisao = false;

var parado;
var movimento;

var meusPontos = 0;

function mostraAtor() {
  if (parado == true) {
    image(imagemAtor, xAtor, yAtor, 50, 55);
  } else {
    image(imagemAtorMovimento, xAtor, yAtor, 50, 55);
  }
}

function mostraAtorMovimento() {
  if (movimento == true) {
    image(imagemAtorMovimento, xAtor, yAtor, 50, 55);
  }
}


function movimentaAtor() {
  if (keyIsDown(UP_ARROW)) {
    parado = false; 
    movimento = true;
    mostraAtorMovimento();
    yAtor -= 3;
  } else if (keyIsDown(DOWN_ARROW)) {
      parado = false;
      movimento = true;
      mostraAtorMovimento();
      yAtor += 3;
  } else {
      movimento = false;
      parado = true;
  }
}

function verificaColisao() {
  // collideRectRect(x, y, width, height, x2, y2, width2, height2 )
  for (var i = 0; i < imagemCarros.length; i++) {
    colisao = collideRectRect(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 50, 50);
    if (colisao) {
      voltaAtorParaPosicaoInicial();
      somDaColisao.play();
      if (pontosMaiorQueZero()) {
        meusPontos -= 1;
      }
    }
  }
}

function voltaAtorParaPosicaoInicial() {
  yAtor = 370;
}

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

function marcaPonto() {
  if (yAtor < -23) {
    meusPontos += 1;
    somDoPonto.play();
    voltaAtorParaPosicaoInicial();
  }
}

function pontosMaiorQueZero() {
  return (meusPontos > 0)
}

tem a funcao Draw, entao voce tem que escrever 1 ou outro.