[我正在做一个小型游戏项目,出于好奇,我评论了刷新主要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
对象的替代方法?
根据man wgetch
,我引用:
如果窗口不是填充板,并且自从上次调用wrefresh以来已对其进行了移动或修改,则会在读取另一个字符之前调用wrefresh。
因为这是一个游戏,在循环内,并且在对player_1->key_move(params)
的例行调用中更具体,所以对WINDOW
对象进行了修改。这就是程序导致这种行为的原因。
我意识到游戏逻辑取决于WINDOW
的状态,因此将来可能会进行多次读取/写入。所有游戏逻辑都应单独处理。