Закройте программу, когда пользователь нажимает кнопку «X» с SDL - PullRequest
0 голосов
/ 04 февраля 2012

Я пытаюсь закрыть программу, когда пользователь нажимает кнопку 'X', она отлично работает, используя

SDL_Event Events;

while (Run)
{
    while (SDL_PollEvent(&Events))
    {
        if (Events.type == SDL_QUIT)
            Run = false;
    }
    // draw pretty pictures to the window :3
}

в основной функции, но когда я помещаю свой основной цикл в класс, а не в тот же файл, что и основная функция, он все равно рисует красивые картинки, но не реагирует на нажатие кнопки 'X', у меня также есть попытался объявить sdl_event в моем main.cpp, где моя основная функция находится и передается в класс, но это тоже не работает.

1 Ответ

0 голосов
/ 01 июля 2013

Хм, ну, я должен согласиться с sftrabbit, что вы должны показать код, который не работает, а не то, что работает.Но я отправлю это с предоставленной информацией.Попробуйте что-то вроде этого:

#include <SDL/SDL.h>

class SystemManager {
    public:
        // Here we will just have a couple public members for example purposes.
        bool running;
        SDL_Event events;
        void inputManager(); // Handle input.
        void renderingManager(); // Handle drawing pretty pictures.
};

void SystemManager::inputManager() {
    while(SDL_PollEvent(&events)) {
        if(events.type == SDL_QUIT)
            running = false;
    }
}

void SystemManager::renderingManager() {
    // Draw pretty pictures...
}

int main(int argc, char* argv[]) {
    SDL_Init(SDL_INIT_EVERYTHING);
    // Make your screen here...
    SystemManager sysMgr;
    sysMgr.running = true;
    // Game Loop:
    while(sysMgr.running) {
        sysMgr.inputManager();
        sysMgr.renderingManager();
    }
    // Don't forget to quit SDL:
    SDL_Quit();
    return 0;
}

Редактировать: я должен объяснить еще немного.По сути, это работает благодаря наличию единственного объекта, который обрабатывает как рендеринг, так и ввод, наряду с (ключевой частью), имеющим контроль над рабочей переменной.Мое предположение о том, что у вас не получилось, состоит в том, что в главной функции у вас была переменная, запускающая bool, к которой у вашего класса не было доступа.

...