5
respostas

A vaca não se mexe quando coloco a funçao de retonar a posição inicial após pontuar

Boa tarde! Sempre que chamo a função que faz a vaca reaparecer na parte de baixo da tela após uma pontução, eu fico impossibilitado de mexer a vaquinha. Se eu não faço essa chamada, a vaca se mexe normalmente, mas a pontuação entra naquela contagem infinita.

//player variables
let xPlayer = 85;  //player x position
let yPlayer = 366;  //player y position

let score = 0;
let collision = false;

function createPlayer() {
  image(playerImage, xPlayer, yPlayer, 30, 30); 
}

function playerMovement() {
  if (keyIsDown(UP_ARROW)) {
    yPlayer -= 3;
  }

  if (keyIsDown(DOWN_ARROW)) {
    yPlayer += 3;
  }
}

function collisionCheck() {
  for (let i = 0; i < carImages.length; i++) {
    collision = collideRectCircle(xCars[i], yCars[i], wCar, hCar, xPlayer, yPlayer, 15)
    if (collision) {
      playerReborn();
    }
  }
}

function playerReborn() {
  yPlayer = 366;
}

function createScoreBoard() {
  textSize(24);
  textAlign(CENTER);
  fill(204, 0, 0);
  text(score, 300, 25)
}

function scoreCounter() {
  if (yPlayer < 15)
    score +=1;
    playerReborn();
}
5 respostas

Boa tarde Thiago, o mesmo erro está acontecendo comigo, não sei o motivo, fiz um "band-aid fix" para este problema hahah, segue o código.

function encostouNaBorda(){
  if (yAtor < 15)
    voltarAtorPosicaoInicial();
}

Lembre de chamar essa função lá no sketch.js também.

Olá, as funções no sketch.js foram adicionadas corretamente? Pra você não conseguir mexer o personagem após chamar essa função, pode ser que de alguma forma collision = true permanentemente. Nesse caso a vaca fica retornando pro início infinitamente. Mas aí tem que ver o código dos outros arquivos, esse código aí aparenta tá correto.

Fala Rodolpho, vou deixar o link do projeto aqui, mas verifiquei as chamadas de função e me parecem corretas. Vou deixar aqui de qualquer forma

function setup() {
  createCanvas(600, 400);
  backgroundSound.loop();
}

function draw() {
  background(roadImage);
  createPlayer();
  createCars();
  carSpeed();
  playerMovement();
  carLoop();
  collisionCheck();
  createScoreBoard();
  scoreCounter();
}

Revi teu código, tem um erro nas chaves do if do scoreCounter(). Isso deve tá fazendo playerReborn() ser chamada sem parar. Corrigido ficaria assim:

function scoreCounter() {
  if (yPlayer < 15){
    score +=1;
    playerReborn();
  }
}

Dá uma olhada aí. Espero que dê certo.

Putz Rodolpho era exatamente isso. Que tremenda falta de atenção minha!! Muito obrigado