查看子模块中的_FrameCallback
代码Shady.Rendering
,似乎没有全局标志显示“运行动画回调但不运行动态属性评估”。也没有官方/记录的途径来做到这一点。
但是,在逐个实例的基础上,有一种非官方的方式可以暂停动态:只需删除未记录的._dynamics
属性,也许将其存储在某个地方以供以后恢复。.Animate
对属性执行相同操作以禁用动画回调。要一举禁用这两种类型的动态,怎么样:
def ToggleDynamics(x):
x._disabled_dynamics, x._dynamics = x._dynamics, getattr(x, '_disabled_dynamics', {})
x._disabled_Animate, x.Animate = x.Animate, getattr(x, '_disabled_Animate', None)
x
您的World
或Stimulus
实例在哪里。然后,要将此切换全局化,您可以执行以下操作:
def ToggleDynamicsEverywhere(world):
for thing in [world] + list(world.stimuli.values()):
ToggleDynamics(thing)
试试看,python -m Shady shell showcase
你会发现它会ToggleDynamicsEverywhere(world)
暂停除视频播放之外的所有内容。
有一些相当明显的方法可以自定义这两个函数来明确启用/禁用动态而不是切换它们,或者在所有Stimulus
实例上操作但不包括World
,或者禁用动态属性但不是动画回调,反之亦然.