Dzień dobry! Robię grę 2d typu RPG. Kolizję jaką chciałbym zaimplementować to kolizja typu AABB. Problem polega na tym, że kolizja jest wykrywana nawet jak jej nie ma
Kolorem czarnym zaznaczony jest blok
czerwony - gracz, który ma kolizje
zielony - gracz, który jest troche wyżej / dalej i już nie ma kolizji.
sposób w który sprawdzam tą kolizję jest następujący
bool Collision(const glm::vec4& object1, const glm::vec4& object2)
{
bool collisionX = object1.x <= object2.w && object1.w >= object2.x;
bool collisionY = object1.y <= object2.z && object1.z >= objkect2.y;
retrun collisinX && collisionY;
}
void DoCollision()
{
glm::vec4 playerObject = glm::vec4(
player.getX(),
player.getY(),
player.getX() + player.getW(),
player.getY() + player.getH()
);
glm::vec4 boxObject = glm::vec4(
box.getX(),
box.getY(),
box.getX() + box.getW(),
box.getY() + box.getH()
);
if(Collision(playerObject, boxObject){
if(playerObject.x <= boxObject.w) {
std::cout<<"Player kolizja X"<<std::endl;
} else if(playerObject.w >= boxObject.x) {
std::cout<<"Player kolizja W"<<std::endl;
}
if(playerObject.y <= boxObject.z) {
std::cout<<"Player kolizja Y"<<std::endl;
} else if(playerObject.z >= boxObject y) {
std::cout<<"Player kolizja H"<<std::endl;
}
}
}
Przy czym box jest zaprogramowany jako mapa klocków w tablicy.
W jaki sposób to naprawić? Może sprawdzać kolizje w inny sposób?