Окно FLTK не отображается в цикле while c ++ - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь реализовать игровой цикл в FLTK

void SnakeFLTK::init() {
    _display = new Fl_Window(900, 600);
    if (!_display)
        throw SnakeFLTKException("Couldn't make fltk window!");
    _display->color(FL_BLACK);
    _display->show();
    while (!_doExit) {
        std::cout << "-->" << std::endl;
    }
    Fl::run();
}

. У меня проблема в том, что окно не отображается.Я хочу продолжать показывать и перерисовывать окно в цикле while (!_doExit), и важно, чтобы я использовал _doExit.Я попытался использовать

while (Fl::wait > 0)

, но этот метод, кажется, имеет свой собственный цикл, который ожидает событий.Как реализовать цикл, как я сделал, и показать окно?

1 Ответ

1 голос
/ 10 июля 2019

FLTK ничего не делает, пока не будет вызван Fl::run. И, как это, вы ничего не можете сделать после вызова Fl::run, потому что функция возвращает только если главное окно закрыто.

Точно для того, чтобы что-то делать, пока сам Fltk "работает", вы можете зарегистрироваться в цикле ожидания следующим образом:

void CallbackFunc( void* )
{
    std::cout << "Hallo" << std::endl;
}

int main() {
    auto _display = new Fl_Window(900, 600);
    _display->color(FL_BLACK);
    _display->show();
    Fl::add_idle( CallbackFunc );
    Fl::run();
}

В данной функции обратного вызова вы можете рисовать или делать все, что вам нравится, в FLTK, что не обусловлено событиями, исходящими от самих активных виджетов.

...