在我的项目中,我正在运行一列火车,当火车到达特定点时停止移动。这次移动是由glutTimerFunc执行的。我再次希望火车从我点击鼠标到特定位置的位置开始 但是这里的问题是, 我的计时器在到达该位置后仍然在运行,所以即使我初始化起点它不起作用(它从左侧位置继续)。
现在我需要停止计时器并启动新位置的列车计时器。
答案 0 :(得分:2)
API documentation有以下说法:
不支持取消已注册的回叫。相反,在触发时忽略基于其值参数的回调。
因此,在软件中添加一个布尔值,并在触发事件时忽略该事件。最好使用基于时钟的计时器而不是事件驱动的计时器,并在每次主循环运行时手动执行定时更新(您检测自上次更新以来的时间量,并确定是否执行更新刻度(s)),从长远来看。这就是大多数专业软件中物理和各种其他基于时间的模拟的处理方式,使用事件驱动的模型会让您错过或经常不时地处理定时事件。
答案 1 :(得分:1)
欢迎来到游戏引擎和演员的世界。
我的建议是你不要试图通过直接打开或关闭glutTimerFunc来做到这一点。计时器功能应该是整个程序的顶级“心跳”,它的工作就是告诉每个具有行为的对象 - 一个“演员” - 它应该自我更新。列车应该有自己的内部状态,知道它在哪里以及它是否应该移动。