简单模拟:快进和普通定时器
本文关键字:定时器 模拟 简单 | 更新日期: 2023-09-27 18:28:12
一个简单的绘制和移动模拟使用以下内容:
时钟计时器。时间间隔:200ms。移动计时器。间隔:1ms。运动常数值:2.
每当移动计时器滴答作响时,一张图片就会按移动常数相加移动。(即picture.X=picture.X+移动常数)
问题是快速转发。用户可以随时快进模拟。
如何更改这三个值(时钟计时器、移动计时器、移动常数),以使模拟速度更快,同时又不会在快速运行过程中牺牲完整性?
如果用于快速转发的整数倍(1x、2x、3x…)就足够了,那么您只需在计时器处理程序函数期间运行模拟函数几次即可。
不过,我不确定你在用时钟定时器做什么,但同样的原理也适用于它正在做的任何事情。
您可以有一个独立于"实时"的"内部时间"。当系统以基本速度运行时,这两个同步增加(计时器的每一次滴答声(设置为1毫秒)都会使内部时间增加1毫秒。
当你有一个2倍的加速倍数时,每一次定时器滴答声都要在内部时间上加2毫秒。
接下来,你将不得不根据内部时间计算仓位,也许可以使用这样的函数
newposition = startposition + speed * time
正如Hans所暗示的,在大多数模拟中,时间和空间都存在"粒度"。然后通过跳过时间间隔("ticks")来调度代理。然而,如果您需要更灵活和测试良好的调度,您可能需要从ABM模拟包(如Mason(针对Java)或Repast(Java或C++))中借用一个调度器,或者查看它们的开源调度器类代码并翻译成另一种语言。