SDL2 PointInRect If 语句不工作

SDL2 PointInRect If Statement not working

我正在制作一个小游戏作为一个小项目,但我无法通过 if 语句执行任何操作。如果我做到了 !statement 它就可以了。我 运行 这个 if 语句找到鼠标点击的“网格”(我在 for 循环中渲染的数组或多维数据集,我没有显示)上的哪个立方体。我在 Mac 上使用 C++ 和 SDL2。这是我的代码:

#include <iostream>
#include <SDL2/SDL.h>

void RenderRects(SDL_Renderer *renderer);
void ToggleRect(int MouseX, int MouseY);

struct Grid
{
    bool IsActive;
    SDL_Rect Rect;

};

Grid grid[228960];

int main()
{

    bool IsRunning = true;
    bool IsRunningSim;
    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_Window *window = SDL_CreateWindow("My Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 780, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);

    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

    int h, w;
    
    SDL_MaximizeWindow(window);
    SDL_GetRendererOutputSize(renderer, &w, &h);

    
    while (IsRunning)
    {
        // std::cout << w << std::endl;
        // std::cout << h << std::endl;
        SDL_Event ev;
        while (SDL_PollEvent(&ev))
        {
            if (ev.type == SDL_QUIT)
            {
                IsRunning = false;
            }
            if (ev.type == SDL_MOUSEBUTTONDOWN)
            {
                int x, y;
                SDL_GetMouseState(&x, &y);
                ToggleRect(x, y);
            }
        }
        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
        SDL_RenderClear(renderer);

        //rendering
        RenderRects(renderer);

        SDL_RenderPresent(renderer);
        
    }

    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

void RenderRects(SDL_Renderer *renderer)
{
    for (int i = 0; i < 1440; i += 10)
    {
        for (int j = 0; j < 795; j += 10)
        {
            SDL_Rect Rect = {i, j, 10, 10};
            grid[i].Rect = Rect;
            SDL_SetRenderDrawColor(renderer, 100, 100, 100, 225);
            SDL_RenderDrawRect(renderer, &grid[i].Rect);
        }
    }
}

void ToggleRect(int MouseX, int MouseY)
{
    
    SDL_Point MousePos;
    MousePos.x = MouseX;
    MousePos.y = MouseY;
    for (int i = 0; i < 228961; i++)
    {
        if (SDL_PointInRect(&MousePos, &grid[i].Rect)) //This is the if that doesn't work.
        {      
            std::cout << i << std::endl;
        }
       
    }
}

我已经解决了这个问题。我不得不改变我的绘图方法,因为它是在矩形上绘制,然后在我改变它的颜色后显示。生成可能会影响它的 Rects 也存在问题。