Невозможно неявно преобразовать «bool» в «int» - обнаружение столкновений - PullRequest
1 голос
/ 21 августа 2010

Я пытаюсь сделать простой класс по обнаружению столкновений для футбольной игры. Вот код:

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 ]

3 голосов
/ 21 августа 2010

Если вам нужно вернуть переменную true / false, вы должны изменить свою первую строку следующим образом:

bool Collision(int x1, int y1, int radius1, int x2, int y2, int radius2) {
2 голосов
/ 21 августа 2010

Определите свою функцию следующим образом:

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

Теперь вы можете вернуть true или false.Если вы сохраняете int, то вам нужно вернуть целочисленное значение, такое как 0 и 1, но это не выражает намерение функции.

Вы также можете немного сократить свой код:

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);
}
1 голос
/ 22 августа 2010

Не забудьте исправить свой алгоритм.((dx *** dy **) + (dy * dy) <радиусы * радиусы) должно быть: ((dx *** dx **) + (dy * dy) <радиусы * радиусы) </p>

Только когда вы думаете: Вот так!Я исправил эту int / bool вещь, вы получаете кучу ложных срабатываний.

...