SDl2 PollEvent 停止工作并捕获事件

问题描述 投票:0回答:1

我目前正在开发一个 sdl2 项目,我使用 wsl2 vscode 和 vcXserv。我的代码工作完美,但经过一些更改后,它停止工作(所以我回到工作版本,但它仍然存在错误),当我执行代码时,窗口打开并且事件未正确管理。让我解释一下,我添加了一个退出按钮,单击该按钮即可停止我的程序。由于它不再工作,我尝试调试,我所知道的是,当窗口打开时,会显示一系列类型事件(512 和 1024),然后就不会再出现任何事件,即使我移动或用鼠标单击,也没有任何事件。我重新安装了 wsl2、vcXserv、sdl2、opengl librairy 并更新了我的驱动程序,但没有任何效果。我还检查了 valgrind,没有内存泄漏。

这是我的 main() 和我的结构游戏的代码。如果需要,我可以提供更多代码。

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

#include "Game.h"


int main()
{   
    std::unique_ptr<Game> gamelol = std::make_unique<Game>();
    gamelol->Run();
    return 0;
}

#ifndef GAME_H
#define GAME_H

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

#include "Game_Renderer.h"


class Game {
public:

    std::unique_ptr<Game_Renderer> game_renderer;
    SDL_Event event;
    
    Game();

    ~Game();

    void Run();

    bool isRunning;

    void check_Click();

};

#endif


#include "Game.h"

Game::Game() : isRunning(true) {
    game_renderer = std::make_unique<Game_Renderer>();
}

Game::~Game() {

}

void Game::Run() {
    while (isRunning) {
        while (SDL_PollEvent(&event) != 0) {
            std::cout << event.type <<std::endl;
            if(event.type == SDL_QUIT){
                isRunning = false;
            }
            if (event.type == SDL_MOUSEBUTTONDOWN) {
                int mouseX = event.button.x;
                int mouseY = event.button.y;
                std::cout << mouseX << " " << mouseY << std::endl;
                if (mouseX >= game_renderer->Quit->Rect->x && mouseX <= game_renderer->Quit->Rect->x + game_renderer->Quit->Rect->w &&
                    mouseY >= game_renderer->Quit->Rect->y && mouseY <= game_renderer->Quit->Rect->y + game_renderer->Quit->Rect->h) {
                    isRunning = false;
                }
            }
        }
        game_renderer->Render_Opening_Screen();
    }
}


我真的可以利用您的专业知识,谢谢您的宝贵时间。

c++ sdl windows-subsystem-for-linux x11 sdl-2
1个回答
0
投票

我每次渲染一帧时都添加了一个 SDL_Delay,它就完成了这项工作。

© www.soinside.com 2019 - 2024. All rights reserved.