首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ncurse中使用凝固汽油()?

问如何在ncurse中使用凝固汽油()?
EN

Stack Overflow用户
提问于 2022-05-04 10:55:34
回答 2查看 124关注 0票数 0

我正试图在c++中创建一个带有ncurses库的游戏。当我向播放器发射子弹时,我必须使用凝固汽油弹()函数来画出子弹的运动,但是玩家不能移动,因为有了凝固汽油弹()函数。我怎么才能解决呢?我必须使用线程,还是有一个函数可以帮助我做到这一点?谢谢大家的关注。

EN

回答 2

Stack Overflow用户

发布于 2022-05-04 21:05:31

poll() / select()方法很流行,但是--除非你真的需要在同一个循环中检查非诅咒输入--我建议你研究一种基于诅咒的纯基于halfdelay()或timeout()的方法。您也可以在napms()模式下与getch()一起在循环中使用延迟较短的nodelay()。例如,如果您想每隔半秒钟更新一次子弹,那么您可以调用napms(50)十次,而不是调用napms(50) --每次都检查输入,允许玩家响应--然后才更新子弹。

(我的偏见是:如果您坚持使用诅咒调用,您的程序将很容易移植到其他实现,如PDCurses,如果您使用poll() / select()路由,则不会移植。)

票数 1
EN

Stack Overflow用户

发布于 2022-05-04 11:13:49

简短的回答是:您不使用napms与ncurses。您使用无延迟模式和poll().首先使用nodelay()将ncurses置于无延迟模式(有关更多信息,请参见ncurses文档)。

如果您阅读getch()手册页,您将发现它解释了如何在无延迟模式下getch从不阻塞,但是如果没有按下键,则立即返回ERR。

此时,您可以使用poll()或select()等待按下键,并进行显式超时。你的延迟是毫秒。您需要添加一点逻辑来确定应该做什么。

您的总体逻辑如下:

getch

  1. 调用

如果

  1. 返回一个密钥,那么您可以随意使用它,然后转到步骤1.

。

只有当

  1. 返回错误时,才能计算出现在是否是时候做您的程序需要做的事情了,比如拔子弹。这完全有可能,您已经等待了规定的毫秒数,从你的子弹上一次拔出。然后转到步骤1.

只有当您的程序得出一个结论,认为现在还不是提取要点的时候,才能计算出需要等待多少时间才能在步骤3中完成某件事情。

指定时间间隔的

  1. poll()或select()。然后回到步骤1.

因此,例如,当您从一开始,getch给您bupkis,然后您决定您只是画了你的子弹,你需要再次抽出子弹在100毫秒内。您可以使用poll(),醒来后您可以从getch那里得到一些东西,然后您就可以处理这个问题了。然后,无论何时回到步骤5,您都会确定子弹是75毫秒前画出来的(poll()返回了,因为现在有东西是getch-ed,所以没有超时,在处理完密钥之后,您查阅了挂钟,并看到现在是75毫秒后),所以您现在可以多写25毫秒了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72111820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档