colisão entre objetos de imagem.

1. colisão entre objetos de imagem.

Patrick Dantas França dos Santos
Akatsu

(usa Linux Mint)

Enviado em 18/09/2020 - 19:44h

Olá, venho aqui hoje porque tenho uma grande duvida, desejo ver ao bater de duas imagens, calcular o angulo de qual a segunda veio e manda-lá um certa distancia para trás, tipo ricochetear.


  


2. Re: colisão entre objetos de imagem.

Samuel Leonardo
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






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts