((ncurses)-mvwaddch()是否调用wrefresh()?

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

[我正在做一个小型游戏项目,出于好奇,我评论了刷新主要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对象的替代方法?

refresh ncurses
1个回答
0
投票

根据man wgetch,我引用:

如果窗口不是填充板,并且自从上次调用wrefresh以来已对其进行了移动或修改,则会在读取另一个字符之前调用wrefresh。

因为这是一个游戏,在循环内,并且在对player_1->key_move(params)的例行调用中更具体,所以对WINDOW对象进行了修改。这就是程序导致这种行为的原因。

我意识到游戏逻辑取决于WINDOW的状态,因此将来可能会进行多次读取/写入。所有游戏逻辑都应单独处理。

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