3
respostas

AGUARDANDO AJUDA PARA ESTE CÓDIGO, NÃO ESTOU CONSEGUIDO CRIAR.

Boa tarde amigos, estou com um pouco de dificuldade para fazer a colisão dos objetos. Detalhe o código que vou passar a seguir não está com lista criadas de repetições, estou tentando me desafiar e fazer algo diferente, ex; alterei os veículos, coloquei 3 vindo da direita e 3 vindo da esquerda, troquei o código da vaquinha para ela se movimentar para todos os lados, e vou tentar acrescentar outra coisinha se der certo posto.

function verificaColisao(){

colisao = collideRectCircle(xCarro, xCarro2, xCarro3, xCarro4, xCarro5, xCarro7, yCarro, yCarro2, yCarro3, yCarro4, yCarro5, yCarro7, comprimentoCarro, alturaCarro, xAtor, yAtor, 15) } if (colisao){ colidiu(); }

function colidiu(){ yAtor = 366; }

não está colidindo, como resolver?

3 respostas

Oi, José!

Acredito que o problema esteja nas informações dentro do parenteses do collideRectCircle. O comando segue uma lógica e uma ordem para obter as informações, então, casa espaço (cada vírgula) corresponde a uma informação que ele vai usar. Veja:

  • Espaço 1: o valor x* do *carro (do retângulo);
  • Espaço 2: o valor y* do *carro (do retângulo);
  • Espaço 3: o comprimento do carro (do retângulo);
  • Espaço 4: a altura do carro (do retângulo);
  • Espaço 5: o valor x* da *vaca (do ator);
  • Espaço 6: o valor y* da *vaca (do ator);
  • Espaço 7: o diâmetro da vaca (do ator).

OBS: Com espaço, quero dizer o valor de cada "casa", ou seja, cada item colocado antes da vírgula.

Então, o que acontece no seu código é o seguinte: mesmo você colocando o valor de cada carro, um por um, dentro do comando, ele ainda vai entender como um comando só para apenas um item. Em outras palavras, não está criando uma colisão para cada carro, e sim uma colisão utilizando os valores dos outros carros. Caso opte por não criar uma lista, você teria que criar um comando verificaColisao() para cada carro que você criar, então seria necessário repetir a função SETE VEZES.

Tente da seguinte maneira primeiro e veja se funciona em apenas um dos carros:

function verificaColisao(){
colisao = collideRectCircle(xCarro, yCarro, comprimentoCarro, alturaCarro, xAtor, yAtor, 15) } 

if (colisao) { 
colidiu(); 
}

function colidiu(){ yAtor = 366; }

Com esse código, deve funcionar a colisão em pelo menos um dos carros. Depois, caso queira, é só criar outra função usando o xCarro2 e yCarro2, e assim vai.

OBS²: Lembre-se sempre de chamar a função no sketch.

Nao está funcionando ainda, colocoquei o comando de print ("colidiu") para checar e nao aparece colisao.

function verificaColisao(){ colisao = collideRectCircle(xCarro, yCarro, comprimentoCarro, alturaCarro, xAtor, yAtor, 15)}

if (colisao) { colidiu(); }

function colidiu(){ yAtor = 366; }

testei em apenas um carro e nao funciona. Obs: chamei a verificacão no sketch.js

obs a parte dos veiculos está da seguinte forma

Bom resolvi recrir o codigo completo novamente por lista, tentei da forma que você me passou mas o mesmo não funcionou.

Vamos la vou mandar uma imagem para analise. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Por lista nesta função:

function movimenteCarro(){
  xCarros[0] -= velocidadeCarros[0];
  xCarros[1] -= velocidadeCarros[1];
  xCarros[2] -= velocidadeCarros[2];
  xCarros[3] += velocidadeCarros[3];
  xCarros[4] += velocidadeCarros[4];
  xCarros[5] += velocidadeCarros[5];

O mesmo não vai funcionar: 1- porque como expliquei acima estou tentando me desafiar para aprender mais , criei uma função para os veiculos andarem nos dois sentidos, sendo assim tenho valores - e + !

Nesta outra etapa:

function voltarAposisaoInicialdoCarro(){
  if(xCarros[0] < - 50){
    xCarros[0] = 600
  }
  if(xCarros[1] < - 80){
    xCarros[1] = 600
  }
  if(xCarros[2] < - 50){
    xCarros[2] = 600
  }
  if(xCarros[3] > + 620){
    xCarros[3] = 1

  }
  if(xCarros[4] > + 620){
    xCarros[4] = 1
  }
  if(xCarros[5] > + 620){
    xCarros[5] = 1
  }

}

A valores com possições diferentes

Neste caso como posso organizar e fazer funcionar a colição sabendo isso?

Obs: tentei criar para a funcao function movimenteCarro(){ um for e tentei manter da seguinte forma:

 xCarros[i] -= velocidadeCarros[i];
  xCarros[i] += velocidadeCarros[i];

O mesmo nao funcionou.

tentei recriar os parametros de [] usando para os 3 primeiros carros a letra "i" para os outros a "k", também nao deu.

Fico no aguardo, obrigado.