Проблема с отрисовкой WinAPI / C++

100
30 июня 2019, 04:10

Необходимо создать аналог Марио, желательно не использовать ничего кроме winapi и c++. Возникла проблема при отрисовке текстур. Спустя ~20 секунд выполнения все текстуры, которые были заданы с помощью регионов, и главный герой (rectangle) пропадают. Пробовал отрисовывать карту только один раз, а затем перерисовывать только героя, но проблема никак не решается.
Весь код - https://www.pastiebin.com/5c1d60e5e3e75

case WM_PAINT:
    InvalidateRect(hWnd, NULL, true);
    hdc = BeginPaint(hWnd, &ps);
    //hbrsh = CreateSolidBrush(RGB(0, 0, 0));
    //SelectObject(hdc, hbrsh);
    texture = CreateRectRgn(winRect.left + 100, winRect.top + 350, winRect.left + 200, winRect.top + 450);
    floor = CreateRectRgn(winRect.left, winRect.bottom - 35, winRect.right, winRect.bottom);
    block1 = CreateRectRgn(winRect.left + 150, winRect.top + 300, winRect.left + 400, winRect.top + 350);
    CombineRgn(texture, texture, block1, RGN_OR);
    CombineRgn(texture, texture, floor, RGN_OR);
    //DeleteObject(block);
    block2 = CreateRectRgn(winRect.left + 451, winRect.top + 350, winRect.left + 600, winRect.top + 450);
    CombineRgn(texture, texture, block2, RGN_OR);
    //DeleteObject(block);
    block3 = CreateRectRgn(300, 460, 400, 500);
    CombineRgn(texture, texture, block3, RGN_OR);
    FillRgn(hdc, texture, redBrush);
    FillRgn(hdc, floor, redBrush);
    hbrsh = CreateSolidBrush(RGB(0, 255, 64));
    Rectangle(hdc, cubRect.left, cubRect.top, cubRect.right, cubRect.bottom);
    FillRect(hdc, &cubRect, hbrsh);
    InvalidateRect(hWnd, &cubRect, false);
    EndPaint(hWnd, &ps);
    if (!Jump)
    {
        if (!PtInRegion(texture, cubRect.left, cubRect.bottom + 1) && !PtInRegion(texture, cubRect.right, cubRect.bottom + 1))
            SetTimer(hWnd, 1, 5, NULL);
        else if (PtInRegion(texture, cubRect.right, cubRect.bottom + 1))
            KillTimer(hWnd, 1);
    }
    else if (Jump)
    {
        countOfup++;
        if (countOfup == 100 || (PtInRegion(texture, cubRect.left, cubRect.top - 1)))
        {
            KillTimer(hWnd, 2);
            Jump = false;
            countOfup = 0;
            SetTimer(hWnd, 1, 5, NULL);
        }
    }
READ ALSO
Regex, а так же конвертация ASCII to UTF8 C++

Regex, а так же конвертация ASCII to UTF8 C++

В общем, картина следующая: у меня есть окно создания имени для персонажа и мне нужно решить 2 проблемы с которыми я столкнулся

125
Помогите с потоками C++

Помогите с потоками C++

Работаю с потоками первый разПодскажите как решить проблему

117
Проверка на нажатия QPushButton

Проверка на нажатия QPushButton

Есть вектор: static QVector<QString>pages={"1","2","3","4","5"}; Нужно чтобы при каждой нажатии QPushButton в textBrowser выводилось по одному элементу вектора

101
Программа поиска и замены на Python или С++

Программа поиска и замены на Python или С++

Нужно написать программу, работающую по типу Поиска и Замены в ВордеНо при этом замена должна происходить на случайно-сгенерированное слово...

119