Allegro Circle碰撞检测

Allegro Circle Collision Detection

本文关键字:碰撞检测 Circle Allegro      更新时间:2023-10-16

我有一个函数,如果两个圆碰撞,它应该返回true,否则返回false。为了在开发过程中提供帮助,我还在函数中添加了一个部分,只在它们不碰撞时绘制hitbox。

我的问题是,即使它们发生碰撞,它也会继续绘制hitbox,并说它们没有碰撞,这表明函数工作不正常。

int colliding(int x, int y, int r, int x1, int y1, int r1)
{
    //compare the distance to combined radii
    int dx = x1 - x;
    int dy = y1 - y;
    int radii = r + r1;
    if ((dx * dx) + (dy * dy) < radii * radii)
    {
        return true;
    }
    else
    {
        player.hitbox.draw();
        return false;
    }
}
int main()
{
    while (true)
    {
        player.draw();
        int cx = 300;
        int cy = 300;
        int cr = 50;
        al_draw_filled_circle(camera.getScreenPosX(cx), camera.getScreenPosY(cy), cr, al_map_rgb(0, 0, 0));
        colliding(player.hitbox.posX, player.hitbox.posY, player.hitbox.radius, cx, cy, cr);

        al_flip_display();
        al_clear_to_color(al_map_rgb(255, 255, 255));
    }
}

我假设camera.getScreenPosX/Y()将您的cx/cy/cr圆转换到另一个空间,而不是player.hitbox.posx/y所在的空间。但是我不能确定,因为没有给出player.hitbox.draw()的实现。

你的collision函数似乎很好,所以我去检查player.hitpox.posx/y和cx/cy是否在同一坐标空间中。