SamL
(usa XUbuntu)
Enviado em 18/09/2020 - 21:17h
Isso é a mesma colisão usada em jogos. No caso, o que você precisa é do algoritmo de bounding boxes e então mover o objeto para fora do outro.
Dê uma olhada aqui no que eu fiz:
https://github.com/cpusam /chora_engine/blob/master/include/collision.hpp">https://github.com/cpusam /chora_engine/blob/master/include/collision.hpp
Veja a função "boudingbox", ela recebe dois retangulos, cada retangulo tem o ponto x e y no canto esquerdo superior, que é normalmente onde fica a origem do retangulo em toolkits.
Vamos supor o seguinte, que você tenha dois objetos que cada um tem um retangulo representando o corpo "físico" deles.
Então, você move um deles no eixo X e verifica com o boundingbox se os dois objetos se tocaram.
Caso ocora um retorno true, então você deve avaliar estas possibilidades:
1-Em relação ao objeto A, a velocidade X dele é menor que zero, ou seja, ele está vindo da direita para a esquerda
2-Em relação ao objeto A, a velocidade X dele é maiorr que zero, ou seja, ele está vindo da esquerda para a direita
No caso 1, para mover para fora o objeto A do B, você deve fazer algo assim:
if (velAX < 0) {
defina posição X do objeto A = posição X objeto B + (largura retangulo de B) / 2 + (largura retangulo de A) / 2;
}
//esse abaixo é para o caso 2
else if (velAX > 0) {
defina posição X do objeto A = posição X objeto B - (largura retangulo de B) / 2 - (largura retangulo de A) / 2;
}
No eixo Y é feito a mesma coisa, avalia a velocidade Y do objeto A e move o A em Y em relação ao objeto B.
Só fazer um if (velAY > 0) {
//move A pra cima de B
}
else if (velAY < 0) {
//move A pra baixo de B
}
Depois de processada colisão em X e Y ai sim você pode calcular o angulo da posição X/Y de A para B.
____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Acesse meu GitHub:
https://github.com/cpusam