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