【问题标题】:Cannot implicitly convert 'bool' to 'int' - collision detection无法将“bool”隐式转换为“int” - 碰撞检测
【发布时间】:2010-08-21 06:05:25
【问题描述】:

我正在尝试为足球比赛制作一个简单的碰撞检测类。代码如下:

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,我明白这一点,但我该如何解决呢? 感谢您的帮助。

【问题讨论】:

  • 你希望它返回一个 int 吗?如果是这样,您希望代表什么价值?

标签: c# collision-detection


【解决方案1】:

如果你需要返回一个真/假变量,你应该把你的第一行改成这样:

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

【讨论】:

    【解决方案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);
    }
    

    【讨论】:

    • @NeoHaxxor - 很简单,是的,但你明白为什么它有效吗?
    • 否决票的任何理由?请在投票时发表评论。
    • 为什么要更改函数的返回类型,可以使用类似 int result = (dxdy)+(dydy)
    • @saurab,因为当一个函数必须确定两个点是否碰撞时,它应该返回一个boolean 值。它更清楚地向消费者表达了它的意图。
    • @saurabh,代码已经坏了,这个方法不能有任何消费者,因为这个方法甚至没有编译。所以我真的不明白你的意思。
    【解决方案3】:

    别忘了修正你的算法。 ((dx***dy**)+(dy*dy)

    就在你想的时候:哇!我修复了那个 int/bool 的东西,你会得到一堆误报。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-30
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多