|
|
@@ -26,7 +26,10 @@ class Scheduler:
|
|
|
|
|
|
def tick(self, dt: float) -> None:
|
|
|
for eid in list(self._timers):
|
|
|
- fn, interval, elapsed, repeat = self._timers[eid]
|
|
|
+ entry = self._timers.get(eid)
|
|
|
+ if entry is None: # 回调内已 unschedule 本 tick 未遍历的条目
|
|
|
+ continue
|
|
|
+ fn, interval, elapsed, repeat = entry
|
|
|
elapsed += dt
|
|
|
if elapsed >= interval:
|
|
|
if repeat:
|
|
|
@@ -41,7 +44,7 @@ class Scheduler:
|
|
|
def install_scheduler(lua, sched: Scheduler) -> None:
|
|
|
py_sched = sched # Lupa: Python 对象直接可见
|
|
|
|
|
|
- def lua_schedule(fn, interval: float, loops) -> int:
|
|
|
+ def lua_schedule(fn, interval: float, loops=None) -> int:
|
|
|
# 游戏里 Schedule(fn, interval, loops) 第三参 nil/缺省=循环, >0=一次性
|
|
|
if loops is None or loops == 0:
|
|
|
return py_sched.schedule(fn, float(interval))
|