refresh - (ncurses) - mvwaddch() 是否调用 wrefresh()?
问题描述
我正在开发一个小型游戏项目,出于好奇,我评论了刷新主要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
,因此将来可能会出现几次读/写。所有游戏逻辑都将单独处理。
推荐阅读
- vba - 参数不是可选的和错误的参数数量或无效的属性分配错误
- python - Python 的 id 函数的 Matlab 等效项
- azure - 如何从 Key Vault 自动映射 Azure Functions 机密
- javascript - AngularJS 自定义属性
- python - 如何从 Django 中的查询集中检索数据并将其放入数组中而不放入列名?
- java - Frida:打印调用函数
- javascript - this.$root.$emit 运行该事件两次
- amazon-web-services - Ansible AWS 创建实例标签计数的字典
- html - 电子邮件中的可点击 HTML 表格
- c# - MailMessage 中的 AlternateView 和附件有什么区别?