我目前正在开发一个 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();
}
}
我真的可以利用您的专业知识,谢谢您的宝贵时间。
我每次渲染一帧时都添加了一个 SDL_Delay,它就完成了这项工作。