this.getRect().intersects(w.getRect())什么意思
时间: 2023-12-24 14:02:20 浏览: 133
这是一个简单的碰撞检测方法,用于检测两个矩形是否相交。其中,this.getRect() 和 w.getRect() 分别是两个矩形的矩形区域(或者说是矩形的边界框),intersect() 方法用于判断两个矩形是否有重叠部分。如果有,则返回 true,表示两个矩形发生了碰撞;如果没有重叠部分,则返回 false,表示两个矩形没有发生碰撞。
相关问题
m_picCtrl.MoveWindow(m_picCtrl.GetRect() + ptOffset);class "CStatic" 没有成员 "GetRect"
是的,你所提到的问题是正确的,因为 CStatic 类确实没有 GetRect 成员函数。GetRect 函数在 MFC 中是 CWnd 类的成员函数。如果您想获取 CStatic 控件的矩形,则需要使用 CWnd::GetClientRect 或 CWnd::GetWindowRect 成员函数。例如,您可以使用以下代码来获取 m_picCtrl 控件的矩形:
```
CRect rect;
m_picCtrl.GetClientRect(&rect);
m_picCtrl.MoveWindow(rect.left + ptOffset.x, rect.top + ptOffset.y, rect.Width(), rect.Height());
```
或者,如果您想要获取窗口相对于屏幕的矩形,则可以使用以下代码:
```
CRect rect;
m_picCtrl.GetWindowRect(&rect);
ScreenToClient(&rect);
m_picCtrl.MoveWindow(rect.left + ptOffset.x, rect.top + ptOffset.y, rect.Width(), rect.Height());
```
这些代码使用了 CWnd::GetClientRect,CWnd::GetWindowRect 和 CWnd::MoveWindow 成员函数来获取和移动 CStatic 控件的位置和大小。
指针是如何运用的 auto ebits = ebs.begin(); while (ebits != ebs.end()) { //敌机子弹和主机碰撞模拟,HP-- if (RectDuangRect((*ebits)->GetRect(), hero.GetRect())) { delete(*ebits); ebits = ebs.erase(ebits); HP--; if (HP == 0) is_play = false; RECT a = hero.GetRect(); putimg(NULL, a.left, a.top, &sbombimg); break; }
在上述代码中,指针的运用如下:
1. 首先,使用`auto`关键字声明了一个名为`ebits`的变量,并将其初始化为`ebs`容器的起始迭代器。
2. 使用`while`循环遍历`ebs`容器中的元素,直到`ebits`迭代器等于`ebs.end()`,即到达容器的末尾。
3. 在循环中,通过解引用指针迭代器`(*ebits)`获取指向敌机子弹对象的指针,并调用其成员函数`GetRect()`获取敌机子弹的矩形区域。
4. 利用函数`RectDuangRect()`判断敌机子弹的矩形区域与主机的矩形区域是否相交,如果相交则进行碰撞模拟。
5. 如果发生碰撞,首先删除敌机子弹对象,通过`delete`关键字释放内存。
6. 调用容器的`erase()`函数删除指向该敌机子弹对象的迭代器,并返回指向下一个元素的迭代器。
7. 主机的HP减少1,如果HP减少到0,将`is_play`标志设置为`false`,表示游戏结束。
8. 获取主机的矩形区域,并使用函数`putimg()`在该区域绘制爆炸效果。
9. 使用`break`语句退出循环,只处理第一个碰撞的敌机子弹。
阅读全文