Lua旋转点绘圆:解决启停后点位跳转的状态保存问题
解决圆形旋转点重启跳转问题
你的代码问题出在时间计算逻辑上:(t - last) + t这个表达式完全错误,重启时会导致计算出的角度突然跳变,所以点会瞬移。正确的思路是保存累计的旋转时长,而不是每次记录单个时间点,这样重启时能从上次停止的角度继续旋转。
修复后的代码如下:
local elapsedTime = 0 -- 保存累计旋转的总时长 local trigger = false local lastUpdateTime = getMillis() -- 记录上一次update的时间 function update() local currentTime = getMillis() local T = 3000 -- 旋转周期(毫秒) if trigger then -- 计算本次update和上次的时间差,累加到总时长 local delta = currentTime - lastUpdateTime elapsedTime = elapsedTime + delta -- 用累计时长计算角度,得到平滑的x/y坐标 local angle = 2 * math.pi * elapsedTime / T x = math.cos(angle) y = math.sin(angle) end lastUpdateTime = currentTime -- 更新上一次update的时间 end function onValueChanged(key) if key == "x" and self.values.x == 1 then trigger = not trigger -- 启动时同步当前时间,避免暂停期间的时间被累加 if trigger then lastUpdateTime = getMillis() end end end
关键修改说明:
- 用
elapsedTime累计旋转的总时长,暂停时这个值会保留,重启后继续累加,保证角度连续。 - 每次update计算时间差
delta,避免直接用系统时间导致的跳变。 - 启动时重置
lastUpdateTime,防止暂停期间的时间被误加到elapsedTime里。
这样修改后,旋转点在停止再启动时会从上次的位置继续平滑旋转,不会出现跳转。
内容的提问来源于stack exchange,提问作者Fried Maxi
相关产品推荐
相关产品推荐

