【问题标题】:Allegro Circle Collision DetectionAllegro 圆碰撞检测
【发布时间】:2016-03-26 00:32:58
【问题描述】:

我有一个函数,如果两个圆发生碰撞,则返回 true,否则返回 false,为了帮助开发,我还在函数中添加了一个部分,仅当它们不碰撞时才绘制 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));
    }
}

【问题讨论】:

    标签: c++ allegro5


    【解决方案1】:

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

    你的collision函数看起来不错,所以我去检查一下 player.hitpox.posx/y 和 cx/cy 是否在同一个坐标空间中。

    【讨论】:

    • 你是对的,hitboxes 的位置有问题,虽然我不确定是什么。不过我可以找到解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2010-10-16
    • 2013-01-28
    • 2016-08-08
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多