Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi Win32应用程序中的冲突处理_Winapi_Win32gui - Fatal编程技术网

Winapi Win32应用程序中的冲突处理

Winapi Win32应用程序中的冲突处理,winapi,win32gui,Winapi,Win32gui,在我画了很多圈之后,我想处理一个圈之间的碰撞,但我不知道怎么做。我希望圆圈的颜色是随机的。我使用函数RGB(),但它不起作用。请帮帮我。谢谢 我的代码 int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; HBRUSH brush; HBRUSH hBrush; HPEN hPen; static int dX[10] , dY[10] ; static int x[10], y[10], oldX[10], oldY[10]; switch (message

在我画了很多圈之后,我想处理一个圈之间的碰撞,但我不知道怎么做。我希望圆圈的颜色是随机的。我使用函数RGB(),但它不起作用。请帮帮我。谢谢

我的代码

int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
HBRUSH brush;
HBRUSH hBrush;
HPEN hPen;

static int dX[10] , dY[10] ;
static int x[10], y[10], oldX[10], oldY[10];
switch (message)
{
case WM_CREATE:
    SetTimer(hWnd, 1, 3, NULL);
    Beep(750, 300);
    for (int i = 0; i < 10; i++){
        dX[i] = rand() % 15 + 0;
        dY[i] = rand() % 15 + 0;
        x[i] = rand() % 15 + 0;
        y[i] = rand() % 15 + 0;
        oldX[i] = x[i];
        oldY[i] = y[i];
    }
    break;
case WM_TIMER:
    hdc = GetDC(hWnd);
    brush = (HBRUSH)SelectObject(hdc, GetStockObject(WHITE_BRUSH));

    RECT temp[10];
    RECT rect;
    GetClientRect(hWnd, &rect);
    brush = (HBRUSH)SelectObject(hdc, GetStockObject(RGB(rand() % 255 + 0, rand() % 255 + 0, rand() % 255 + 0)));
    for (int i = 0; i <10; i++){
        temp[i].left = oldX[i];
        temp[i].top = oldY[i];
        temp[i].right = oldX[i] + 30;
        temp[i].bottom = oldY[i] + 30;
        FillRect(hdc, &temp[i], brush); 

        Ellipse(hdc, x[i], y[i], 30 + x[i], 30 + y[i]);
        oldX[i] = x[i];
        oldY[i] = y[i];

        x[i] += dX[i];
        y[i] += dY[i];


        if (x[i] + 30 > rect.right || x[i] < 0)
        {
            dX[i] = -dX[i];
        }
        if (y[i] + 30 > rect.bottom || y[i] < 0)
        {
            dY[i] = -dY[i];
        }

    }

    SelectObject(hdc, brush);

    ReleaseDC(hWnd, hdc);

    break;
intwmid,wmEvent;
PAINTSTRUCT-ps;
HDC-HDC;
HBRUSH刷;
HBRUSH-HBRUSH;
HPEN-HPEN;
静态int-dX[10],dY[10];
静态整数x[10],y[10],oldX[10],oldY[10];
开关(信息)
{
案例WM_创建:
设置计时器(hWnd,1,3,空);
嘟嘟声(750300);
对于(int i=0;i<10;i++){
dX[i]=rand()%15+0;
dY[i]=rand()%15+0;
x[i]=rand()%15+0;
y[i]=rand()%15+0;
oldX[i]=x[i];
古老的,古老的;
}
打破
案例WM_计时器:
hdc=GetDC(hWnd);
画笔=(HBRUSH)选择对象(hdc,GetStockObject(白色画笔));
直肠温度[10];
RECT-RECT;
GetClientRect(hWnd和rect);
笔刷=(HBRUSH)选择对象(hdc,GetStockObject(RGB(rand()%255+0,rand()%255+0,rand()%255+0));
for(int i=0;i rect.right | | x[i]<0)
{
dX[i]=-dX[i];
}
如果(y[i]+30>矩形底部| | y[i]<0)
{
dY[i]=-dY[i];
}
}
选择对象(hdc、画笔);
释放DC(hWnd、hdc);
打破
我的图片演示在这里


迭代每个圆,比较其中心与其他圆中心之间的距离,如果该距离小于半径之和,则它们发生碰撞。
GetStockObject
采用枚举值(
COLOR…
)不是一个
RGB
值。@bruce965我不明白,你可以解释更多。@user1793036如何修复它。请帮帮我。我希望颜色是随机的。您正在尝试通过查找具有不同颜色的像素来检测碰撞,但在您的情况下,这不是必需的。假设你有两个球体,你知道它们的大小(半径)和它们在空间中的位置。如果它们重叠,则两者之间的距离小于2*半径,并且当两者之间的距离小于2*半径时,它们重叠。只要在你的申请表中检查一下。你可以在维基百科或任何你喜欢的地方找到2D距离的公式。