(ncurses) - mvwaddch () делает вызов wrefre sh ()? - PullRequest
0 голосов
/ 25 апреля 2020

Я работаю над небольшим игровым проектом и просто из любопытства прокомментировал строку, которая делает ссылку sh на основной WINDOW объект.

while(game->state)
    {
      //Move into player
      params->mov = player_1;
      params->x = player_1->pos_x;
      params->y = player_1->pos_y;
      params->game = game;
      //curs_set(FALSE);
      player_1->key_move(params);

      //Move into player
      mvwprintw(p_info,y, x, "TERRAIN: [%c]", player_1->inplace);

      //wrefresh(main_scene);           /* THE LINE I DELETED */
      wrefresh(p_info);
      sleep(TICK);

    }

Игра запустилась без проблем и игрок обновил свою позицию графически. player_1->key_move(params) в конечном итоге вызывает wgetch(), mvwaddch() и mvinch(), больше ничего (из ncurses). wrefresh(p_info) был прокомментирован после и, как и ожидалось, объект WINDOW никогда не обновлялся. Мне интересно, если эта функция вызывает wrefresh() в какой-то момент. В руководстве нет прямого указания на это.

Если да, есть ли альтернативы mvwaddch(), который не обновляет объект WINDOW?

1 Ответ

0 голосов
/ 25 апреля 2020

Согласно man wgetch, и я цитирую:

Если окно не является пэдом, и оно было перемещено или изменено с момента последнего вызова wrefre sh, wrefre sh будет вызван до того, как прочитан другой персонаж.

Поскольку это игра, внутри l oop, и более конкретная в обычном вызове player_1->key_move(params), есть модификации WINDOW объект. Вот почему программа вызывает такое поведение.

Я понял, что игровые логики c зависели от состояния WINDOW, поэтому в будущем возможно несколько операций чтения / записи. Все игровые логи c обрабатываются отдельно.

...