首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTimer setInterval不重置remainingTime

QTimer setInterval不重置remainingTime
EN

Stack Overflow用户
提问于 2015-10-03 00:54:26
回答 1查看 3.6K关注 0票数 7

我有一个用QT编写的应用程序,它使用QTimer。这基本上是一个游戏,所有的动作都由定时器控制。游戏包括增加\降低游戏速度的能力。提高速度的代码是

代码语言:javascript
复制
    timerValue -= speedUpValue;
    if (timerValue < maxSpeed) {
        timerValue = maxSpeed;
    }
    timer -> setInterval(timerValue); 

speedUpValuemaxSpeed是常数。几乎相同的代码用于降低速度。问题是,setInterval重置内部计时器,因此,如果您持续快速增加或降低速度游戏,最终永远不会继续,因为remainingTime不断地被重置。是否有一种方法手动设置remainingTime或更改间隔而不重置它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-03 07:30:01

您可以完全省略timer对象,而使用静态方法QTimer::singleShot(...),并使用timerValue为每个计时器事件设置一个新的单镜头。因此,无论timerValue被修改多频繁,每个计时器周期都将使用旧值完成,并按当前值进行调度。

如前所述,您可以有效地实现相同的事情保持定时器对象,但移动setInterval()到计时器事件,基本上是相同的事情,但保持计时器对象,如果您需要它的某些原因。

正如Craig在评论中提到的,第一种方法还将确保计时器事件不会累积,以防您的游戏逻辑花费更长时间。此外,如果您采用异步设计,如果您选择一个持续运行的计时器,那么下一个游戏周期可能会在旧的游戏周期完成之前开始执行。

在这方面,最好不要使用连续运行的计时器,而是手动安排每个下一个游戏周期,并且只有当您需要的时候。例如,如果游戏结束,您可能不需要安排另一个。此外,这还可以更好地控制游戏速度的精确程度,在游戏周期执行完成之后,您可以计算出在需要下一个执行之前还有多少时间,并使用该值来调度它,或者如果执行时间太长,您可以立即调度它。

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

https://stackoverflow.com/questions/32917831

复制
相关文章

相似问题

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