无法将'bool'隐式转换为'int' - 碰撞检测

时间:2010-08-21 06:05:25

标签: c# collision-detection

我正在尝试为足球比赛制作一个简单的碰撞检测课程。这是代码:

int Collision(int x1, int y1, int radius1, int x2, int y2, int radius2)  
{  
    int dx = x2 - x1;  
    int dy = y2 - y1;  
    int radii = radius1 + radius2;  
    if ((dx*dy)+(dy*dy)< radii * radii)  
    {  
        return true;  
    }  
    else  
    {  
        return false;  
    }  
}  

问题在于代码返回true或false。 Visual Studio说它不能隐式地将bool转换为int,我理解这一点,但我该如何解决呢? 谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

如果您需要返回true / false变量,则应将第一行更改为:

bool Collision(int x1, int y1, int radius1, int x2, int y2, int radius2) {

答案 1 :(得分:2)

像这样定义你的功能:

bool Collision(int x1, int y1, int radius1, int x2, int y2, int radius2)

现在您可以返回truefalse。如果保留int,则需要返回整数值,例如01,但这并不表示函数意图。

你也可以稍微缩短你的代码:

bool Collision(int x1, int y1, int radius1, int x2, int y2, int radius2)  
{  
    int dx = x2 - x1;  
    int dy = y2 - y1;  
    int radii = radius1 + radius2;  
    return ((dx * dy) + (dy * dy) < radii * radii);
}

答案 2 :(得分:1)

不要忘记修复算法。 ((dx *** dy **)+(dy * dy)&lt; radiusii * radii) 应该: ((dx *** dx **)+(dy * dy)&lt; radiusii * radii)

就在你想的时候:哇!我修复了int / bool的事情,你得到了一堆误报。