检查一下这个碰撞检测f (m_bird.m_X + m_bird.m_Rect.width() >= m_barriers[i].m_X && m_bird.m_X <= m_barriers[i].m_Rect.width() + m_barriers[i].m_Rect.width() && m_bird.m_Y + m_bird.m_Rect.height() >= m_barriers[i].m_Y && m_bird.m_Y <= m_barriers[i].m_Y + m_barriers[i].m_Rect.height()) { return true; // 发生碰撞
时间: 2024-04-21 14:22:26 浏览: 107
碰撞的检测1
对于碰撞检测代码,你提供的条件判断语句有一些问题。假设 `m_bird.m_X` 表示小鸟的 X 坐标,`m_bird.m_Y` 表示小鸟的 Y 坐标,`m_bird.m_Rect` 表示小鸟的矩形范围,`m_barriers[i].m_X` 表示第 i 个障碍物的 X 坐标,`m_barriers[i].m_Y` 表示第 i 个障碍物的 Y 坐标,`m_barriers[i].m_Rect` 表示第 i 个障碍物的矩形范围。
你的条件判断语句存在以下问题:
1. 第一个条件判断中,比较 `m_bird.m_X + m_bird.m_Rect.width()` 是否大于等于 `m_barriers[i].m_X`,这可能会导致判断不准确。你可能需要将 `m_bird.m_X + m_bird.m_Rect.width()` 改为 `m_bird.m_X + m_bird.m_Rect.width() > m_barriers[i].m_X`。
2. 第二个条件判断中,比较 `m_bird.m_X` 是否小于等于 `m_barriers[i].m_Rect.width() + m_barriers[i].m_Rect.width()`,这也可能导致判断不准确。你可能需要将 `m_barriers[i].m_Rect.width() + m_barriers[i].m_Rect.width()` 改为 `m_barriers[i].m_X + m_barriers[i].m_Rect.width()`。
3. 第三个条件判断中,比较 `m_bird.m_Y + m_bird.m_Rect.height()` 是否大于等于 `m_barriers[i].m_Y`,同样可能导致判断不准确。你可能需要将 `m_bird.m_Y + m_bird.m_Rect.height()` 改为 `m_bird.m_Y + m_bird.m_Rect.height() > m_barriers[i].m_Y`。
4. 第四个条件判断中,比较 `m_bird.m_Y` 是否小于等于 `m_barriers[i].m_Y + m_barriers[i].m_Rect.height()`,同样可能导致判断不准确。你可能需要将 `m_barriers[i].m_Y + m_barriers[i].m_Rect.height()` 改为 `m_barriers[i].m_Y + m_barriers[i].m_Rect.height()`。
修正后的代码如下:
```cpp
if (m_bird.m_X + m_bird.m_Rect.width() > m_barriers[i].m_X &&
m_bird.m_X < m_barriers[i].m_X + m_barriers[i].m_Rect.width() &&
m_bird.m_Y + m_bird.m_Rect.height() > m_barriers[i].m_Y &&
m_bird.m_Y < m_barriers[i].m_Y + m_barriers[i].m_Rect.height()) {
return true; // 发生碰撞
}
```
这样,当小鸟的矩形范围与障碍物的矩形范围发生重叠时,就会返回 `true`,表示发生了碰撞。
阅读全文